畅通工程再续

Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit Status

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!

  1. #include<stdio.h>
  2. #include<algorithm>
  3. #include<math.h>
  4. #define Max 0x3f3f3f3f
  5. using namespace std;
  6. struct island
  7. {
  8. double x , y ;
  9. }land[];
  10.  
  11. int n , fa[] ;
  12. int in ;
  13.  
  14. struct edge
  15. {
  16. int u , v ;
  17. double w ;
  18. }e[*+];
  19.  
  20. void binary (island a , int key , int l , int r )
  21. {
  22. if ( l >= r) {
  23. return ;
  24. }
  25. int mid = (l + r) / ;
  26. binary (a , key , l , mid ) ;
  27. binary (a , key , mid + , r ) ;
  28. double dis = (a.x - land[mid].x) * (a.x - land[mid].x) + (a.y - land[mid].y) * (a.y - land[mid].y) ;
  29.  
  30. if ( dis <= * && dis >= * ) {
  31. e[in].u = key ;
  32. e[in].v = mid ;
  33. e[in].w = sqrt (dis) ;
  34. in++ ;
  35. }
  36. }
  37.  
  38. bool cmp (edge a , edge b)
  39. {
  40. return a.w < b.w ;
  41. }
  42.  
  43. int find (int x)
  44. {
  45. return fa[x] == x ? x : find (fa[x]) ;
  46. }
  47.  
  48. void kruskal ()
  49. {
  50. sort ( e + , e + in , cmp ) ;
  51. int x , y ;
  52. double ans = ;
  53. for (int i = ; i < in ; i++) {
  54. x = find (e[i].u) ;
  55. y = find (e[i].v) ;
  56. if ( x != y) {
  57. ans += e[i].w ;
  58. fa[x] = y ;
  59. }
  60. }
  61. printf ("%.1f\n" , 100.0 * ans ) ;
  62. }
  63. int main ()
  64. {
  65. // freopen ("a.txt" , "r" , stdin ) ;
  66. int T;
  67. scanf ("%d" , &T ) ;
  68. int x , y ;
  69. int cnt ;
  70. while (T--) {
  71. in = ;//RE 's reason
  72. cnt = ;
  73. scanf ("%d" , &n ) ;
  74. for (int i = ; i <= n ; i++)
  75. fa[i] = i ;
  76. for (int i = ; i <= n ; i++) {
  77. scanf ("%lf%lf" , &land[i].x , &land[i].y ) ;
  78. }
  79. for (int i = ; i < n ; i++ ) {//建立 u , v , w
  80. binary ( land[i] , i , i + , n + ) ;
  81. }
  82. //To determine whether the connectivity
  83. for (int i = ; i < in ; i++) {
  84. x = find (e[i].u) ;
  85. y = find (e[i].v) ;
  86. fa[x] = y;
  87. }
  88. for (int i = ; i <= n ; i++) {
  89. if (fa[i] == i )
  90. cnt++ ;
  91. if (cnt > )
  92. break ;
  93. }
  94.  
  95. for (int i = ; i <= n ; i++)
  96. fa[i] = i ;
  97.  
  98. if ( cnt > )
  99. puts ("oh!") ;
  100. else
  101. kruskal () ;
  102. }
  103. return ;
  104. }

每组测试前要把edge的下标in初始化,为此re


FAQ | About Virtual Judge | Forum | Discuss | Open Source Project
All Copyright Reserved ©2010-2

畅通工程再续(MST)的更多相关文章

  1. hdu-1875 畅通工程再续---MST

    题目链接: https://vjudge.net/problem/HDU-1875 题目大意: 相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小 ...

  2. hdu1875 畅通工程再续 最小生成树并查集解决---kruskal

    http://acm.hdu.edu.cn/showproblem.php?pid=1875 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...

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

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

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

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

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

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

  6. HDU1875——畅通工程再续(最小生成树:Kruskal算法)

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

  7. 畅通工程再续--hdu1875

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

  8. HDU1875 畅通工程再续 (并查集)

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

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

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

随机推荐

  1. 开源分布式计算引擎 & 开源搜索引擎 Iveely 0.5.0 为大数据而生

    Iveely Computing 产生背景 08年的时候,我开始接触搜索引擎,当时遇到的第一个难题就是大数据实时并发处理,当时实验室的机器我们可以随便用,至少二三十台机器,可以,却没有程序可以将这些机 ...

  2. css的小三角实现的方式

    先上一个简单的例子哈: 此时的方向向下. 如果想方向向上的话用:border-top:0;border-bottom:4px solid; 1. width:0 height:0 border宽度,颜 ...

  3. [vijos1264]神秘的咒语(LCIS)

    描述身为拜月教的高级间谍,你的任务总是逼迫你出生入死.比如这一次,拜月教主就派你跟踪赵灵儿一行,潜入试炼窟底.据说试炼窟底藏着五行法术的最高法术:风神,雷神,雪妖,火神,山神的咒语.为了习得这些法术, ...

  4. 机器学习中的矩阵方法03:QR 分解

    1. QR 分解的形式 QR 分解是把矩阵分解成一个正交矩阵与一个上三角矩阵的积.QR 分解经常用来解线性最小二乘法问题.QR 分解也是特定特征值算法即QR算法的基础.用图可以将分解形象地表示成: 其 ...

  5. 编写高质量代码改善C#程序的157个建议[泛型集合、选择集合、集合的安全]

    前言   软件开发过程中,不可避免会用到集合,C#中的集合表现为数组和若干集合类.不管是数组还是集合类,它们都有各自的优缺点.如何使用好集合是我们在开发过程中必须掌握的技巧.不要小看这些技巧,一旦在开 ...

  6. 每天一个linux命令(37):free 命令

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...

  7. Mobile Web

    Silun来给大家介绍几个常见的移动浏览器标签~ 当当当~ <meta name="apple-mobile-web-app-capable" content="y ...

  8. z-index详解

    来源于:http://www.cnblogs.com/ForEvErNoME/p/3373641.html 概念 z-index 属性设置元素的堆叠顺序.拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的 ...

  9. hdu2222 字典树

    要注意二点 . 这组数据 1 6 she he he say shr her yasherhs出现重复的,也要算.所以这里答案为4: 这一组 1 6 she he he say shr her yas ...

  10. C语言结构体的初始化

    今天在工作时,看到了奇葩的结构体初始化方式,于是我查了一下C99标准文档和gcc的说明文档,终于搞清楚是怎么回事了. 假设有如下结构体定义: typedef struct { int a, b, c; ...