最小生成树 HDU 各种畅通工程的题,prim和kru的模板题
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 typedef struct node 5 { 6 int u,v,w; 7 }edge; 8 edge e[10005]; 9 int dg[105]; 10 void init(int n) 11 { 12 int i; 13 for(i = 1;i <=n ;i++) 14 dg[i] = i; 15 } 16 int cmp(const void *a,const void *b) 17 { 18 return (*(struct node *)a).w-(*(struct node *)b).w; 19 } 20 int find(int x) 21 { 22 if(x != dg[x]) 23 { 24 dg[x] = find(dg[x]); 25 } 26 return dg[x]; 27 } 28 29 int main() 30 { 31 int n,i,j,leap,ans,u,v; 32 while(scanf("%d",&n)&&n) 33 { 34 int t = n*(n-1)/2; 35 ans = 0; 36 for(i = 1;i <= t;i++){ 37 scanf("%d%d%d%d",&e[i].u,&e[i].v,&e[i].w,&leap); 38 if(leap) 39 e[i].w = 0; 40 } 41 42 qsort(e+1,t,sizeof(edge),cmp); 43 init(n); 44 45 for(i = 1;i <= t;i++) 46 { 47 u = find(e[i].u); 48 v = find(e[i].v); 49 if(u != v) 50 { 51 dg[u] = v; 52 ans += e[i].w; 53 }//到这里就卡主了= =。。。 54 } 55 printf("%d\n",ans); 56 } 57 return 0; 58 }
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 typedef struct node 5 { 6 int u,v,w; 7 }edge; 8 edge e[10005]; 9 int dg[105]; 10 void init(int n) 11 { 12 int i; 13 for(i = 1;i <=n ;i++) 14 dg[i] = i; 15 } 16 int cmp(const void *a,const void *b) 17 { 18 return (*(struct node *)a).w-(*(struct node *)b).w; 19 } 20 int find(int x) 21 { 22 if(x != dg[x]) 23 { 24 dg[x] = find(dg[x]); 25 } 26 return dg[x]; 27 } 28 29 int main() 30 { 31 int n,i,j,leap,ans,u,v; 32 while(scanf("%d",&n)&&n) 33 { 34 int t = n*(n-1)/2; 35 ans = 0; 36 for(i = 1;i <= t;i++){ 37 scanf("%d%d%d%d",&e[i].u,&e[i].v,&e[i].w,&leap); 38 if(leap) 39 e[i].w = 0; 40 } 41 42 qsort(e+1,t,sizeof(edge),cmp); 43 init(n); 44 45 for(i = 1;i <= t;i++) 46 { 47 u = find(e[i].u); 48 v = find(e[i].v); 49 if(u != v) 50 { 51 dg[u] = v; 52 ans += e[i].w; 53 } 54 } 55 printf("%d\n",ans); 56 } 57 return 0; 58 }
1233 还是畅通工程 prim
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int map[105][105]; 5 int vis[105]; 6 int d[105]; 7 int prime(int n) 8 { 9 int i,j,primer,ans,min; 10 memset(vis,0,sizeof(vis)); 11 12 ans = 0; 13 for(i = 2;i <= n;i++) 14 d[i] = map[1][i]; 15 vis[1] = 1; 16 17 for(i = 1;i < n;i++) 18 { 19 min = 0x7fffffff; 20 for(j = 2;j <= n;j++) 21 { 22 if(min > d[j]&& !vis[j]) 23 min = d[j],primer = j; 24 } 25 ans += min; 26 vis[primer] = 1; 27 for(j = 2;j <= n;j++) 28 if(d[j] > map[primer][j] && !vis[j]) 29 d[j] = map[primer][j]; 30 } 31 return ans; 32 } 33 int main() 34 { 35 int n,w,i,j,leap,ans,u,v; 36 while(scanf("%d",&n)&&n) 37 { 38 int t = n*(n-1)/2; 39 ans = 0; 40 41 for(i = 1;i <= n;i++) 42 for(j = 1;j <= n;j++) 43 map[i][j] = 0x7fffffff; 44 45 for(j = 1;j <= n;j++) 46 map[j][j] = 0; 47 48 for(i = 1;i <= t;i++){ 49 scanf("%d%d%d",&u,&v,&w); 50 if(map[u][v]>w) 51 map[u][v] = map[v][u] = w; 52 } 53 ans = prime(n); 54 printf("%d\n",ans); 55 } 56 return 0; 57 }
kru
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 typedef struct node 5 { 6 int u,v,w; 7 }edge; 8 edge e[10005]; 9 int set[105]; 10 int cmp(const void *a,const void *b) 11 { 12 return (*(struct node*)a).w-(*(struct node*)b).w; 13 } 14 int find(int x) 15 { 16 if(x != set[x]) 17 set[x] = find(set[x]); 18 } 19 void merge(int x,int y) 20 { 21 set[x] = y; 22 } 23 void init(int n) 24 { 25 int i; 26 for(i = 1;i <= n;i++) 27 set[i] = i; 28 } 29 int main() 30 { 31 int n,w,i,j,leap,ans,u,v; 32 while(scanf("%d",&n)&&n) 33 { 34 int t = n*(n-1)/2; 35 ans = 0; 36 37 for(i = 1;i <= t;i++){ 38 scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].w); 39 } 40 qsort(e+1,t,sizeof(edge),cmp); 41 init(n); 42 43 for(i = 1;i <= t;i++) 44 { 45 u = find(e[i].u); 46 v = find(e[i].v); 47 if(u != v) 48 { 49 ans += e[i].w; 50 merge(u,v); 51 } 52 } 53 54 printf("%d\n",ans); 55 } 56 return 0; 57 }
1863 畅通工程 克鲁斯
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 typedef struct node 5 { 6 int u,v,w; 7 }edge; 8 edge e[10005]; 9 int set[105]; 10 int cmp(const void *a,const void *b) 11 { 12 return (*(struct node*)a).w-(*(struct node*)b).w; 13 } 14 int find(int x) 15 { 16 if(x != set[x]) 17 set[x] = find(set[x]); 18 } 19 void merge(int x,int y) 20 { 21 set[x] = y; 22 } 23 void init(int n) 24 { 25 int i; 26 for(i = 1;i <= n;i++) 27 set[i] = i; 28 } 29 int main() 30 { 31 int n,w,i,j,leap,ans,u,v,m; 32 while(scanf("%d %d",&n,&m)&&n) 33 { 34 init(m); 35 ans = 0; 36 for(i = 1;i <= n;i++) 37 scanf("%d %d %d",&e[i].u,&e[i].v,&e[i].w); 38 39 qsort(e+1,n,sizeof(edge),cmp); 40 for(i = 1;i <= n;i++) 41 { 42 u = find(e[i].u); 43 v = find(e[i].v); 44 if(u != v) 45 { 46 merge(u,v); 47 ans += e[i].w; 48 } 49 } 50 51 int t; 52 t = find(1); 53 leap = 1; 54 for(i = 2;i <= m;i++) 55 { 56 set[i] = find(i); 57 if(t != set[i]) 58 { 59 leap = 0; 60 break; 61 } 62 } 63 64 65 66 if(leap) 67 printf("%d\n",ans); 68 else 69 puts("?"); 70 } 71 return 0; 72 }
转载于:https://www.cnblogs.com/0803yijia/archive/2012/08/06/2625704.html
最小生成树 HDU 各种畅通工程的题,prim和kru的模板题相关推荐
- HDU 1863畅通工程(最小生成树)(prim算法)
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1875 畅通工程再续 (最小生成树)
畅通工程再续 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 1863 畅通工程
畅通工程 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1874 /************************************************* ...
- Hdu1233 最小生成树_还是畅通工程
某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通 (但不一定有直接的公路相连,只要能间接通过公路可达即 ...
- [kuangbin带你飞]专题六 最小生成树 L - 还是畅通工程 (简单最小生成树)
L - 还是畅通工程 题目链接:https://vjudge.net/contest/66965#problem/L 题目: 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府&qu ...
- HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...
- HDU 1874 畅通工程续 2008浙大研究生复试热身赛(2)
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- HDU 1874 畅通工程续
畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDOJ 1875 HDU 1875 畅通工程再续 ACM 1875 IN HDU
MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1875 ...
最新文章
- 一台服务器两个mysql_在一台服务器上安装两个或多个mysql的实现步骤_MySQL
- vue 1.0和vue 2.0的变化和区别
- mysql varchar int_MySQL中int、char、varchar的性能浅谈
- Wireshark文档阅读笔记-User Datagram Protocol(UDP)
- 大一计算机应用的实验报告,大一《计算机应用基础》实验报告1.doc
- 计算机电源管理设置,关于电源管理的电源管理计划设置
- 黑苹果 电脑关机是因为发生了问题_【电脑常识】常见的电脑误区,你中了几点?...
- php显示网络图片,PHP在服务器端怎么显示图片呢?
- 2016年408考研算法题
- bzoj 1260 (区间dp)
- HDU 6232 Confliction
- 算法竞赛零散知识点记录
- python测试工具--nose简介
- sqlserver 查看服务器名称以及sql语句跨服务器查询设置
- Linux 下安装应用程序
- Python VTK numpy数据3D可视化
- PDF文件如何转换成txt文本文档
- Locust 接口性能测试
- ipad能运行python_ipad上可以运行python吗?
- unity 通过 dll 传递字符串给python,实现小冰颜值鉴定
热门文章
- JefferyZhao教导我们...
- 论文分享Why Do Adversarial Attacks Transfer? Explaining Transferability of Evasion and Poisoning Attacks
- Google地图 Google Places API中附近搜索,文本搜索,地址搜索,地点详情的简单介绍
- Linux学习总结(60)——Linux系统常用命令速查手册
- u3d计算向量间夹角
- 客户上云究竟为了什么?
- Java实现Word转PDF【完整版】
- arcengine cliasic code(转)基于ArcGIS Engine + C#实现用户自定义动态电力符号
- Lookup Transformation
- 散文是指以文字为创作、审美对象的文学艺术体裁