题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1029

题目大意:一个发电站,给n座房子供电, 任意房子之间有电线直接或者间接相连接, 现在想知道需要连接这些房子花费的平均电线长度。平均电线长度 = (最长电线长度 + 最短电线长度)/ 2;

解题思路:裸的最小生成树

代码如下:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = ;
  4. struct edge
  5. {
  6. int s, t, l;
  7. edge() {}
  8. edge(int s, int t, int l):s(s), t(t), l(l) {}
  9. };
  10. vector<edge>vec;
  11. int par[N], Rank[N];
  12. int n;
  13.  
  14. void init()
  15. {
  16. for(int i=; i<=n; ++ i)
  17. par[i] = i, Rank[i] = ;
  18. }
  19.  
  20. int Find(int x)
  21. {
  22. if(par[x] == x)
  23. return x;
  24. else
  25. return par[x] = Find(par[x]);
  26. }
  27.  
  28. void unite(int x, int y)
  29. {
  30. x = Find(x), y = Find(y);
  31. if(x == y)
  32. return ;
  33.  
  34. if(Rank[x] < Rank[y])
  35. par[x] = y;
  36. else
  37. {
  38. par[y] = x;
  39. if(Rank[x] == Rank[y])
  40. Rank[x] ++;
  41. }
  42. }
  43.  
  44. bool same(int x, int y)
  45. {
  46. return Find(x) == Find(y);
  47. }
  48.  
  49. bool cmp(const edge &a, const edge &b)
  50. {
  51. return a.l < b.l;
  52. }
  53.  
  54. bool Cmp(const edge &a, const edge &b)
  55. {
  56. return a.l > b.l;
  57. }
  58.  
  59. int kruskal(int m)
  60. {
  61. init();
  62. if(m == )
  63. sort(vec.begin(), vec.end(), cmp);
  64. else
  65. sort(vec.begin(), vec.end(), Cmp);
  66. int res = ;
  67. for(int i=; i<vec.size(); ++ i)
  68. {
  69. edge e = vec[i];
  70. if(!same(e.s, e.t))
  71. {
  72. unite(e.s, e.t);
  73. res += e.l;
  74. }
  75. }
  76. return res;
  77. }
  78.  
  79. void solve(int cases)
  80. {
  81. scanf("%d", &n);
  82. vec.clear();
  83. while()
  84. {
  85. int s, t, l;
  86. scanf("%d%d%d", &s, &t, &l);
  87. if((s || t || l) == false)
  88. break;
  89. vec.push_back(edge(s, t, l));
  90. }
  91.  
  92. int ans = ;
  93. ans += kruskal();
  94. ans += kruskal();
  95. if(ans & )
  96. printf("Case %d: %d/%d\n", cases, ans, );
  97. else
  98. printf("Case %d: %d\n", cases, ans/);
  99.  
  100. }
  101.  
  102. int main()
  103. {
  104. int t;
  105. scanf("%d", &t);
  106. for(int i=; i<=t; ++ i)
  107. solve(i);
  108. return ;
  109. }

Light OJ 1029- Civil and Evil Engineer (图论-最小生成树)的更多相关文章

  1. Lightoj 1029 - Civil and Evil Engineer

    1029 - Civil and Evil Engineer    PDF (English) Statistics Forum Time Limit: 2 second(s) Memory Limi ...

  2. Civil and Evil Engineer(普林姆)

    http://acm.sdut.edu.cn:8080/vjudge/contest/view.action?cid=198#problem/E 水题一道,题意就是让求一遍最小生成树与最大生成树,但我 ...

  3. Light OJ 1114 Easily Readable 字典树

    题目来源:Light OJ 1114 Easily Readable 题意:求一个句子有多少种组成方案 仅仅要满足每一个单词的首尾字符一样 中间顺序能够变化 思路:每一个单词除了首尾 中间的字符排序 ...

  4. Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖

    题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...

  5. Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖

    标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...

  6. Light OJ 1316 A Wedding Party 最短路+状态压缩DP

    题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两 ...

  7. light oj 1007 Mathematically Hard (欧拉函数)

    题目地址:light oj 1007 第一发欧拉函数. 欧拉函数重要性质: 设a为N的质因数.若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N ...

  8. Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖

    题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ...

  9. Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩

    题目来源:Light OJ 1288 Subsets Forming Perfect Squares 题意:给你n个数 选出一些数 他们的乘积是全然平方数 求有多少种方案 思路:每一个数分解因子 每隔 ...

  10. Jan's light oj 01--二分搜索篇

    碰到的一般题型:1.准确值二分查找,或者三分查找(类似二次函数的模型). 2.与计算几何相结合答案精度要求比较高的二分查找,有时与圆有关系时需要用到反三角函数利用 角度解题. 3.不好直接求解的一类计 ...

随机推荐

  1. ionic tabs置顶

    找了好久怎么解决这问题,终于找到了一哥们留下来的经验,万分感谢,特此拷贝过来,留着下次以免忘记 我在主页ion-nav-bar元素上添加hide-nav-bar=“true”;然后又在ion-view ...

  2. autoit小贴士

    如何防止程序重复运行? #include <Misc.au3>_Singleton("test") 如何删除脚本程序自身? ;删除脚本程序自身 Run(@ComSpec ...

  3. 一些不错的学习资料(node)

    Node.js的api中文文档 http://expressjs.jser.us/ 关于Node.js的一系列不错的学习文章 http://blog.fens.me/ express框架的使用 htt ...

  4. Linux手动释放内存

    手动释放内存 1.sync将内存中的缓存写入磁盘 2.  to free pagecache, use echo 1 > /proc/sys/vm/drop_caches;       to f ...

  5. vc-complex-type.2.3: Element 'filter-mapping' cannot have character [children], because the type's content type is element-only.

    报这种错一般是因为导入的项目或者黏贴的代码中有中文空格或者中文编码,只需将报错代码重写一遍即可.

  6. Log4net 记录日志

    配置文件 备注,需要放到根目录下面 <?xml version="1.0" encoding="utf-8"?> <configuration ...

  7. LR12.53—第1课:构建Vuser脚本

    第1课:构建Vuser脚本 要生成系统上的负载,首先建立一个可以运行以模拟真实用户行为Vuser脚本.您使用VuGen创建和构建Vuser脚本. 在这一课中,你将涵盖以下主题: 介绍VuGen将 - ...

  8. Thoughtful function is also good for investigation

    Did you know how many friends in your IM? Some of them you are not familiar with, but your friends c ...

  9. GET与POST的区别

    转自http://blog.csdn.net/darxin/article/details/4944225#comments HTTP请求的GET与POST方式的本质区别可以参考hyddd在<浅 ...

  10. git入门札记

    分布式版本控制(个人主机即版本库,有一台作为“中央服务器”来方便“交换”修改,管理修改 而非文件) vs.  SVN CVS git 安装后设置: git config - -global user. ...