码迷,mamicode.com
首页 > 其他好文 > 详细

[2016-04-13][HDU][1233][还是畅通工程]

时间:2016-04-14 01:22:14      阅读:151      评论:0      收藏:0      [点我收藏+]

标签:

  • 时间:2016-04-13 23:56:49 星期三

  • 题目编号:[2016-04-13][HDU][1233][还是畅通工程]

  • 题目大意:求最小生成树

  • 分析:直接kruskal

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. const int maxn = 100 + 10;
  5. int fa[maxn];
  6. struct Edge{
  7. int u,v,c;
  8. Edge(int _u= 0,int _v=0,int _c=0):u(_u),v(_v),c(_c){}
  9. bool operator < (const Edge & a)const{
  10. return c < a.c;
  11. }
  12. }e[maxn*maxn];
  13. int fnd(int x){
  14. return x == fa[x] ? x: (fa[x] = fnd(fa[x]));
  15. }
  16. void ini(int n){
  17. for(int i = 0 ; i <= n ; ++i){
  18. fa[i] = i;
  19. }
  20. }
  21. int main(){
  22. int n;
  23. //freopen("in.txt","r",stdin);
  24. while(~scanf("%d",&n) && n){
  25. int a,b,c;
  26. ini(n);
  27. for(int i = 0 ; i < n * (n-1)/2;++i){
  28. scanf("%d%d%d",&a,&b,&c);
  29. e[i] = Edge(a,b,c);
  30. }
  31. sort(e,e+n*(n-1)/2);
  32. int cnt = 0,ans = 0;
  33. for(int i = 0 ; i < n*(n - 1)/ 2;++i){
  34. int f1 = fnd(e[i].u);
  35. int f2 = fnd(e[i].v);
  36. if(f1 != f2){
  37. fa[f1] = fa[f2];
  38. ans += e[i].c;
  39. ++cnt;
  40. }
  41. if(cnt == n - 1) break;
  42. }
  43. printf("%d\n",ans);
  44. }
  45. return 0;
  46. }




[2016-04-13][HDU][1233][还是畅通工程]

标签:

原文地址:http://www.cnblogs.com/qhy285571052/p/29d11c68d37bd32c176c5a32857f8d77.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!