Problem Description
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现。现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组RPRush对百岛湖的情况充分了解后,决定在符合条件的小岛间建上桥,所谓符合条件,就是2个小岛之间的距离不能小于10米,也不能大于1000米。当然,为了节省资金,只要求实现任意2个小岛之间有路通即可。其中桥的价格为 100元/米。
 
Input
输入包括多组数据。输入首先包括一个整数T(T <= 200),代表有T组数据。
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
 
Output
每组输入数据输出一行,代表建桥的最小花费,结果保留一位小数。如果无法实现工程以达到全部畅通,输出”oh!”.
 
Sample Input
2
2
10 10
20 20
3
1 1
2 2
1000 1000
 
Sample Output
1414.2
oh!

一代模板如下

AC代码:(仅供参考)

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<algorithm>
  5.  
  6. using namespace std;
  7.  
  8. #define N 110000
  9.  
  10. int father[N];
  11.  
  12. int sum;
  13.  
  14. struct no
  15. {
  16. int x,y;
  17. }di[N];
  18.  
  19. struct node
  20. {
  21. int s,e;
  22. double l;
  23. }dd[N];
  24.  
  25. int Find(int n)
  26. {
  27. while(n!=father[n])
  28. n=father[n];
  29.  
  30. return n;
  31. }
  32.  
  33. void Fin(int x,int y)
  34. {
  35. int a,b;
  36.  
  37. a=Find(x);
  38. b=Find(y);
  39.  
  40. if(a!=b)
  41. {
  42. father[b]=a;
  43. sum++;
  44. }
  45. }
  46.  
  47. bool cmp(node a, node b)
  48. {
  49. return a.l < b.l;
  50. }
  51.  
  52. int main()
  53. {
  54. int t;
  55.  
  56. scanf("%d",&t);
  57.  
  58. while(t--)
  59. {
  60. int c;
  61.  
  62. scanf("%d",&c);
  63.  
  64. for(int i=; i<=c; i++)
  65. father[i]=i;
  66.  
  67. for(int i=; i<c; i++)
  68. scanf("%d%d",&di[i].x, &di[i].y);
  69.  
  70. if(c==)
  71. {
  72. printf("0.0\n");
  73. continue;
  74. }
  75.  
  76. int k=;
  77.  
  78. for(int i=; i<c; i++)
  79. for(int j=i+; j<c; j++)
  80. {
  81. double mi=sqrt((double)(di[i].x-di[j].x)*(di[i].x-di[j].x)+(double)(di[i].y-di[j].y)*(di[i].y-di[j].y));
  82.  
  83. if(mi >= && mi <= )
  84. {
  85. dd[k].s=i;
  86. dd[k].e=j;
  87. dd[k].l=mi;
  88. k++;
  89. }
  90. }
  91.  
  92. sort(dd,dd+k,cmp);
  93.  
  94. sum=;
  95. double sun=;
  96.  
  97. for(int i=; i<k; i++)
  98. if(Find(dd[i].s) != Find(dd[i].e))
  99. {
  100. Fin(dd[i].s,dd[i].e);
  101. sun+=dd[i].l;
  102. }
  103.  
  104. if(sum < c)
  105. printf("oh!\n");
  106. else
  107. printf("%.1lf\n",sun*);
  108.  
  109. }
  110. return ;
  111. }

不甘心,自己再来一

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<algorithm>
  5.  
  6. using namespace std;
  7.  
  8. #define N 110000
  9.  
  10. int p[N], s;
  11.  
  12. struct data
  13. {
  14. int x, y;
  15. }v[N];
  16.  
  17. struct node
  18. {
  19. int a, b;
  20. double l;
  21. }d[N];
  22.  
  23. bool cmp(node a, node b)
  24. {
  25. return a.l < b.l;
  26. }
  27.  
  28. int Find(int x)
  29. {
  30. while(p[x] != x)
  31. x = p[x];
  32.  
  33. return x;
  34. }
  35.  
  36. void Fin(int x, int y)
  37. {
  38. int a = Find(x);
  39. int b = Find(y);
  40.  
  41. if (a != b)
  42. {
  43. s++;
  44. p[b] = a;
  45. }
  46. }
  47.  
  48. int main()
  49. {
  50. int T;
  51. scanf ("%d", &T);
  52.  
  53. while (T--)
  54. {
  55. int n;
  56.  
  57. scanf ("%d", &n);
  58.  
  59. for (int i = ; i <= n; i++)
  60. p[i] = i;
  61.  
  62. for (int i = ; i < n; i++)
  63. scanf ("%d %d", &v[i].x, &v[i].y);
  64.  
  65. int k = ;
  66.  
  67. for (int i = ; i < n; i++)
  68. for (int j = i+; j < n; j++)
  69. {
  70. double mi =sqrt((double)(v[i].x - v[j].x)*(v[i].x - v[j].x) + (double)(v[i].y - v[j].y)*(v[i].y - v[j].y));
  71.  
  72. if (mi >= && mi <= )
  73. {
  74. d[k].a = i;
  75. d[k].b = j;
  76. d[k].l = mi;
  77. k++;
  78. }
  79. }
  80.  
  81. double num = ;
  82. s = ;
  83. sort(d, d+k, cmp);
  84.  
  85. for (int i = ; i < k; i++)
  86. if (Find(d[i].a) != Find(d[i].b))
  87. {
  88. num += d[i].l;
  89. Fin(d[i].a, d[i].b);
  90. }
  91.  
  92. if (s < n-)
  93. printf ("oh!\n");
  94. else
  95. printf ("%.1f\n", *num);
  96. }
  97. return ;
  98. }

HDU - 1875 畅通工程再续的更多相关文章

  1. HDU 1875 畅通工程再续 (prim最小生成树)

    B - 畅通工程再续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit S ...

  2. hdu 1875 畅通工程再续(prim方法求得最小生成树)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1875 /************************************************* ...

  3. HDU 1875 畅通工程再续 (最小生成树)

    畅通工程再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  4. HDU 1875 畅通工程再续 (最小生成树)

    畅通工程再续 题目链接: http://acm.hust.edu.cn/vjudge/contest/124434#problem/M Description 相信大家都听说一个"百岛湖&q ...

  5. HDU 1875 畅通工程再续(kruskal)

    畅通工程再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  6. HDU 1875 畅通工程再续 (Prim)

    题目链接:HDU 1875 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现 ...

  7. HDU - 1875 畅通工程再续【最小生成树】

    Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖 ...

  8. hdu 1875 畅通工程再续(最小生成树,基础)

    题目 让人郁闷的题目,wa到死了,必须要把判断10.0和1000.0的条件放到prim函数外面去.如代码所放.... 正确的(放在prim外): //2个小岛之间的距离不能小于10米,也不能大于100 ...

  9. (step6.1.3)hdu 1875(畅通工程再续——最小生成树)

    题目大意:本题是中文题,可以直接在OJ上看 解题思路:最小生成树 1)本题的关键在于把二维的点转化成一维的点 for (i = 0; i < n; ++i) { scanf("%d%d ...

随机推荐

  1. 尝试封装适用于权限管理的通用API

    谈谈我对权限系统的简单理解 最近一段时间在研究权限系统,在园子里看到个很牛逼的开源的基于DDD-Lite的权限管理系统,并有幸加入了作者的QQ群,呵呵,受到了很大的影响.对于权限管理我有我自己的一些简 ...

  2. HTML当中特殊字符的表示

    (回车换行) <br> (空格符)   &(AND符号) & <(左尖括号.小于号) < >(右尖括号.大于号) > °(度) ° •(间隔符) • ...

  3. iOS 模仿一个小项目,总结一下里边的模块

      ManoBoo:  参考链接:http://www.jianshu.com/p/fd4c46c31508  这个小的项目是参考ManoBoo的简书的,链接在上方,自己在仿做的过程中,也离不开Man ...

  4. Join函数 及Split函数精解示例

    '************************************************************************* '**模 块 名:Join函数 及Split函数精 ...

  5. 总结-Intellij Idea (快捷键 配置修改)

    忽略大小写 输入sensitive,选择Code Completion,右边第一个下拉框,选择noneEditor 鼠标悬浮show quick docEditor Editor Tabs : Mar ...

  6. BZOJ 3365 Distance Statistics 点分治

    这道题是一道点分治的题目,难度不大,可以拿来练手. 关键是对于找出来的重心的删除操作需要删掉这条边,这很重要. 还有每次找重心的时候,不但要考虑他的子节点的siz,还要考虑父节点的siz. 然后就A了 ...

  7. 自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果

    [转] 原文 自定义RecyclerView.ItemDecoration,实现RecyclerView的分割线效果 字数1598 阅读302 评论2 喜欢23 1.背景   RecyclerView ...

  8. js null 和 undefined

    undefined是一个特殊类型,null本质上是一个对象 typeof undefined//"undefined"typeof null//"object" ...

  9. jquery复习笔记

    Jquery基础 让一个按钮灰掉 $("button").("disabled","true"); ance desc选择器(ance代表祖 ...

  10. B2C电子商务系统研发——商品SKU分析和设计(二)

    转:http://www.cnblogs.com/winstonyan/archive/2012/01/07/2315886.html 上文谈到5种商品SKU设计模式,本文将做些细化说明. 笔者研究过 ...