最小生成树模板题

注意最后输出用%f

(从C99开始%f已经不能用于输出double 即 输入用%lf 输出用%f)

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<cmath>
  4. #include<cstring>
  5. #include<string>
  6. #define M(a,b) memset(a,b,sizeof(a))
  7. #define debug(x) cerr<<#x<<"=="<<(x)<<endl
  8. using namespace std;
  9. typedef long long ll;
  10.  
  11. const int maxn=;
  12.  
  13. int f[maxn],tol,n;
  14.  
  15. struct _edge
  16. {
  17. int u,v;
  18. double w;
  19. }edge[maxn*maxn*maxn];
  20.  
  21. bool cmp(_edge a,_edge b)
  22. {
  23. return a.w<b.w;
  24. }
  25.  
  26. struct point
  27. {
  28. int a;
  29. double x,y,z,r;
  30. } pt[maxn];
  31.  
  32. void addedge(point a,point b)
  33. {
  34. edge[tol].u=a.a;
  35. edge[tol].v=b.a;
  36. double len=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)+(a.z-b.z)*(a.z-b.z))-a.r-b.r;
  37. edge[tol].w=len<?:len;
  38. tol++;
  39. }
  40.  
  41. //void addedge(int u,int v,int w)
  42. //{
  43. // edge[tol].u=u;
  44. // edge[tol].v=v;
  45. // edge[tol].w=w;
  46. // tol++;
  47. //}
  48.  
  49. int _find(int x)
  50. {
  51. if(f[x]==-) return x;
  52. else return f[x]=_find(f[x]);
  53. }
  54.  
  55. double kruskal()
  56. {
  57. M(f,-);
  58. sort(edge,edge+tol,cmp);
  59. int cnt=;
  60. double ans=,w;
  61. int u,v,f1,f2;
  62. for(int i=; i<tol; i++)
  63. {
  64. u=edge[i].u;
  65. v=edge[i].v;
  66. w=edge[i].w;
  67. f1=_find(u);
  68. f2=_find(v);
  69. if(f1!=f2)
  70. {
  71. ans+=w;
  72. f[f1]=f2;
  73. cnt++;
  74. }
  75. if(cnt==n-) break;
  76. }
  77. return ans;
  78. }
  79.  
  80. int main()
  81. {
  82. while(scanf("%d",&n)!=EOF&&n)
  83. {
  84. tol=;
  85. double x,y,z,r;
  86. for(int i=; i<n; i++)
  87. {
  88. pt[i].a=i;
  89. scanf("%lf%lf%lf%lf",&pt[i].x,&pt[i].y,&pt[i].z,&pt[i].r);
  90. for(int j=; j<i; j++)
  91. {
  92. addedge(pt[j],pt[i]);
  93. }
  94. }
  95.  
  96. printf("%.3f\n",kruskal()); //注意要用%f
  97. }
  98. return ;
  99. }
  100. /*
  101.  
  102. 3
  103. 10.000 10.000 50.000 10.000
  104. 40.000 10.000 50.000 10.000
  105. 40.000 40.000 50.000 10.000
  106. 2
  107. 30.000 30.000 30.000 20.000
  108. 40.000 40.000 40.000 20.000
  109. 5
  110. 5.729 15.143 3.996 25.837
  111. 6.013 14.372 4.818 10.671
  112. 80.115 63.292 84.477 15.120
  113. 64.095 80.924 70.029 14.881
  114. 39.472 85.116 71.369 5.553
  115. 0
  116.  
  117. */

[ An Ac a Day ^_^ ][kuangbin带你飞]专题六 最小生成树 POJ 2031 Building a Space Station的更多相关文章

  1. [kuangbin带你飞]专题六 最小生成树 POJ 2421 Constructing Roads

    给一个n个点的完全图 再给你m条道路已经修好 问你还需要修多长的路才能让所有村子互通 将给的m个点的路重新加权值为零的边到边集里 然后求最小生成树 #include<cstdio> #in ...

  2. [kuangbin带你飞]专题六 最小生成树 POJ 1287 Networking

    最小生成树模板题 跑一次kruskal就可以了 /* *********************************************** Author :Sun Yuefeng Creat ...

  3. [ An Ac a Day ^_^ ] [kuangbin带你飞]专题六 最小生成树 POJ 1251 Jungle Roads

    题意: 有n个点 每个点上有一些道路 求最小生成树 解释下输入格式 A n v1 w1 v2 w2 A点上有n条边 A到v1权值是w1 A到v2权值是w2 思路: 字符串处理之后跑kruskal求最小 ...

  4. [kuangbin带你飞]专题六 最小生成树

    学习最小生成树已经有一段时间了 做一些比较简单的题还算得心应手..花了三天的时间做完了kuangbin的专题 写一个题解出来记录一下(虽然几乎都是模板题) 做完的感想:有很多地方都要注意 n == 1 ...

  5. [kuangbin带你飞]专题六 最小生成树 N - 畅通工程再续

    相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全 ...

  6. [ An Ac a Day ^_^ ][kuangbin带你飞]专题八 生成树 POJ 1679 The Unique MST

    求最小生成树是否唯一 求一遍最小生成树再求一遍次小生成树 看看值是否相等就可以 #include<cstdio> #include<iostream> #include< ...

  7. [kuangbin带你飞]专题1-23题目清单总结

    [kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...

  8. [kuangbin带你飞]专题十 匹配问题

        A-L 二分匹配 M-O 二分图多重匹配 P-Q 二分图最大权匹配 R-S 一般图匹配带花树 模板请自己找     ID Origin Title   61 / 72 Problem A HD ...

  9. [kuangbin带你飞]专题十 匹配问题 一般图匹配

    过去做的都是二分图匹配 即 同一个集合里的点 互相不联通 但是如果延伸到一般图上去 求一个一般图的最大匹配 就要用带花树来解决 带花树模板 用来处理一个无向图上的最大匹配 看了一会还是不懂  抄了一遍 ...

随机推荐

  1. NET系列文章

    NET系列文章 由于博主今后一段时间可能会很忙(准备出书:<.NET框架设计—模式.配置.工具>,外加换了新工作),所以博客会很少更新: 在最近一年左右时间里,博主各种.NET技术类型的文 ...

  2. C++中文件的操作

    #include <iostream> #include <fstream> using namespace std; int main() { char s[27],m[27 ...

  3. c++class 内存布局

    #include <iostream> using namespace std; class base1 { int a; double b; char c; }; int main() ...

  4. Dogs[HDU2822]

    Dogs Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissio ...

  5. jquery 分页控件2

    jquery 分页控件(二) 上一章主要是关于分页控件的原理,代码也没有重构.在这一章会附上小插件的下载链接,插件主要就是重构逻辑部分,具体可以下载源文件看下,源代码也有注释.为了测试这个插件是能用的 ...

  6. Quartz表达式生成器

    Java版的Quartz表达式生成器,同时适用于Quartz.net(免费下载) Quartz是OpenSymphony开源组织在Job scheduling领域又一个开源项目,它可以与J2EE与J2 ...

  7. storm源码之storm代码结构【译】

    storm源码之storm代码结构[译] 说明:本文翻译自Storm在GitHub上的官方Wiki中提供的Storm代码结构描述一节Structure of the codebase,希望对正在基于S ...

  8. markdown实现

    博客园文章markdown实现   博客园也可以使用markdown写博客了~_~ 实现方法 在博客园管理-设置-页首Html代码中加入: <!-- Markdown --> <sc ...

  9. IOS 跳转到系统的url

    About — prefs:root=General&path=AboutAccessibility — prefs:root=General&path=ACCESSIBILITYAi ...

  10. jQuery跳房子插件hopscotch

    插件描述 跳房子是一个框架,使开发人员可以轻松预览产品并添加到他们的网页 跳房子接受JSON对象作为输入,并提供开发人员来控制渲染巡演显示和管理的游览进度的API. 使用步骤 要使用跳房子框架上手,只 ...