继续畅通工程【最小生成树】
来源:互联网 发布:大数据思维 编辑:程序博客网 时间:2024/06/14 10:28
继续畅通工程
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 15060 Accepted Submission(s): 6515
Problem Description
省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建道路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全省畅通需要的最低成本。
Input
测试输入包含若干测试用例。每个测试用例的第1行给出村庄数目N ( 1< N < 100 );随后的 N(N-1)/2 行对应村庄间道路的成本及修建状态,每行给4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态:1表示已建,0表示未建。
当N为0时输入结束。
当N为0时输入结束。
Output
每个测试用例的输出占一行,输出全省畅通需要的最低
Sample Input
31 2 1 01 3 2 02 3 4 031 2 1 01 3 2 02 3 4 131 2 1 01 3 2 12 3 4 10
Sample Output
310kruskal 当路已经建成的时候 ,在这个结构中,表明那两个之间的距离为0,可以join#include<stdio.h> #include<algorithm> #define max 50*99+10 using namespace std; int set[110]; struct line { int start; int end; int money; int exist; }num[max]; bool cmp(line a,line b) { return a.money<b.money; } int find(int p) { int child=p; int t; while(p!=set[p]) p=set[p]; while(child!=p) { t=set[child]; set[child]=p; child=t; } return p; } void merge(int x,int y) { int fx=find(x); int fy=find(y); if(fx!=fy) set[fx]=fy; } int main() { int city,road,need; int i,j,x,y; while(scanf("%d",&city)&&(city!=0)) { for(i=1;i<=city;i++) set[i]=i; road=city*(city-1)/2; for(i=0;i<road;i++) { scanf("%d%d%d%d",&num[i].start,&num[i].end,&num[i].money,&num[i].exist); if(num[i].exist) merge(num[i].start,num[i].end); } sort(num,num+road,cmp); need=0; for(i=0;i<road;i++) { if(find(num[i].start)!=find(num[i].end)) { merge(num[i].start,num[i].end); need+=num[i].money; } } printf("%d\n",need); } return 0; }prime//继续畅通工程 #include<stdio.h>#include<string.h>#include<algorithm>#define inf 0x3f3f3f#define M 100+5int map[M][M],v[M],dis[M];int prime(int num){int min,sum=0,next;for(int i=1;i<=num;i++){dis[i]=map[1][i];v[i]=0;}v[1]=1;for(int j=1;j<=num;j++) // {min=inf;for(int i=1;i<=num;i++)if(!v[i]&&dis[i]<min){min=dis[i];next=i;}if(min==inf) break;v[next]=1;sum+=min;for(int i=1;i<=num;i++){if(!v[i]&&dis[i]>map[next][i])dis[i]=map[next][i];}}return sum;}int main(){int n;while(scanf("%d",&n)&&n){memset(map,inf,sizeof(map));int t=(n-1)*n/2;for(int i=0;i<t;i++){int a,b,c,d;scanf("%d%d%d%d",&a,&b,&c,&d);if(d) map[a][b]=map[b][a]=0;else map[a][b]=map[b][a]=c;}int sum=prime(n);printf("%d\n",sum);}return 0;}
0 0
- 继续畅通工程 hdu 最小生成树
- Hdu1879 - 继续畅通工程 - 最小生成树
- 继续畅通工程(最小生成树)
- hd1879继续畅通工程【最小生成树】
- 继续畅通工程【最小生成树】
- hdu1879 继续畅通工程 最小生成树
- HDU 1879 继续畅通工程(最小生成树 Kruskal算法)
- HDU oj 1879 继续畅通工程 最小生成树
- 最小生成树 普利姆算法 HDOJ 1879 继续畅通工程
- 最小生成树 克丽丝卡尔算法 hdu1879 继续畅通工程
- hdu1879继续畅通工程 最小生成树prim算法
- hdu1879继续畅通工程 最小生成树prim算法
- HDU 1879 继续畅通工程 最小生成树-Kruskal
- hdu 1879 继续畅通工程 最小生成树
- HDU 1879 继续畅通工程 (最小生成树)
- hdu 1879 继续畅通工程 最小生成树
- hdu1879 继续畅通工程 (最小生成树之prim 算法)
- Hud 1879 继续畅通工程[最小生成树(Kruscal)]
- STL之优先队列priority queue
- CentOS7安装MySQL5.6.28及其修改密码
- JAVA集合框架
- HDU1827-传递的最小花费
- 安全行车就靠它 教你维护汽车制动系统
- 继续畅通工程【最小生成树】
- CSS3 RGBA
- Longest Ordered Subsequence(POJ-2533)
- 记录一个调试插曲
- Kotlin的一点学习资源
- 算法--倒序打印链表--java
- hadoop伪分布式配置
- 手机移动端选择插件 mobileSelect.js
- python字符串查找之 find和index方法