欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 1301 Jungle Roads(裸最小生成树)

发布时间:2025/7/14 编程问答 45 豆豆
生活随笔 收集整理的这篇文章主要介绍了 HDU 1301 Jungle Roads(裸最小生成树) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目链接

今天做了好几个模版最小生成树。。。贴一个kurskral.

1 /* 2 HDU 1301 Jungle Roads 3 最小生成树Kurskal模版 4 */ 5 #include <stdio.h> 6 #include <string.h> 7 #include <stdlib.h> 8 int num,sum; 9 int o[101]; 10 struct edge 11 { 12 int sv; 13 int ev; 14 int w; 15 } p[5000]; 16 int cmp(const void *a,const void *b) 17 { 18 return (*(struct edge *)a).w > (*(struct edge *)b).w ? 1:-1; 19 } 20 int find(int x) 21 { 22 int r = x,t; 23 while(x != o[x]) 24 x = o[x]; 25 while(r != x) 26 { 27 t = o[r]; 28 o[r] = x; 29 r = t; 30 } 31 return x; 32 } 33 void merge(int x,int y,int w) 34 { 35 x = find(x); 36 y = find(y); 37 if(x != y) 38 { 39 o[x] = y; 40 sum += w; 41 num ++; 42 } 43 } 44 int main() 45 { 46 int i,j,n,m,ss,vv,ww,k; 47 char str[3]; 48 while(scanf("%d%*c",&n)!=EOF) 49 { 50 if(!n) break; 51 k = 0; 52 for(i = 1;i <= n;i ++) 53 o[i] = i; 54 for(i = 1; i <= n-1; i ++) 55 { 56 scanf("%s",str); 57 ss = str[0] - 'A' + 1; 58 scanf("%d%*c",&m); 59 for(j = 1; j <= m; j ++) 60 { 61 scanf("%s%d%*c",str,&ww); 62 vv = str[0] - 'A' + 1; 63 p[k].sv = ss; 64 p[k].ev = vv; 65 p[k].w = ww; 66 k ++; 67 } 68 } 69 qsort(p,k,sizeof(p[0]),cmp); 70 sum = 0; 71 num = 1; 72 for(i = 0; i <= k-1; i ++) 73 { 74 merge(p[i].sv,p[i].ev,p[i].w); 75 if(num == n) 76 break; 77 } 78 printf("%d\n",sum); 79 } 80 return 0; 81 }

转载于:https://www.cnblogs.com/naix-x/archive/2012/08/06/2625099.html

总结

以上是生活随笔为你收集整理的HDU 1301 Jungle Roads(裸最小生成树)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。