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

  1. 2
  2. 2
  3. 10 10
  4. 20 20
  5. 3
  6. 1 1
  7. 2 2
  8. 1000 1000

Sample Output

  1. 1414.2
  2. oh!

Author

8600

Source

2008浙大研究生复试热身赛(2)——全真模拟


思路

最小生活树的算法,这里采用的是Kruskal算法

检验是否存在最小生成树只要判断图中连通块的个数,这个可以利用并查集计算

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int father[110];
  4. struct Graph
  5. {
  6. int u;
  7. int v;
  8. double dis;
  9. }maps[10010];
  10. int x[110],y[110];//存放坐标
  11. void init(int n)
  12. {
  13. for(int i=1;i<=n;i++) father[i]=i;
  14. }
  15. int find(int x)
  16. {
  17. while(father[x]!=x) x=father[x];
  18. return x;
  19. }
  20. void join(int a,int b)
  21. {
  22. int t1=find(a);
  23. int t2=find(b);
  24. if(t1!=t2) father[t1]=t2;
  25. }
  26. int main()
  27. {
  28. int t;
  29. cin >> t;
  30. while(t--)
  31. {
  32. int c;
  33. cin >> c;
  34. for(int i=1;i<=c;i++)
  35. cin >> x[i] >> y[i];
  36. int edgeNum = 0;
  37. for(int i=1;i<=c-1;i++)
  38. for(int j=i+1;j<=c;j++)
  39. {
  40. double tmp = sqrt((x[i]-x[j])*(x[i]-x[j]) + (y[i]-y[j])*(y[i]-y[j]));
  41. if(tmp>=10.0 && tmp<=1000.0)
  42. {
  43. maps[++edgeNum].u = i;
  44. maps[edgeNum].v = j;
  45. maps[edgeNum].dis = tmp;
  46. }else continue;
  47. }
  48. init(c);
  49. sort(maps+1,maps+1+edgeNum,[](Graph x,Graph y)->bool{return x.dis < y.dis;});
  50. double distance = 0.0;
  51. for(int i=1;i<=edgeNum;i++)
  52. if(find(maps[i].u) != find(maps[i].v))
  53. {
  54. join(maps[i].u,maps[i].v);
  55. distance += maps[i].dis;
  56. }
  57. int cnt = 0;
  58. for(int i=1;i<=c;i++)
  59. {
  60. if(father[i]==i) cnt++;
  61. }
  62. if(cnt<=1)
  63. printf("%.1lf\n",distance*100.0);
  64. else
  65. cout << "oh!\n";
  66. }
  67. return 0;
  68. }

Hdoj 1875.畅通工程再续 题解的更多相关文章

  1. hdoj 1875 畅通工程再续

    题目传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1875 //9403289 2013-10-24 17:00:49 Accepted 1875 62M ...

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

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

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

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

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

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

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

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

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

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

  7. hdoj 1875 畅通project再续【最小生成树 kruskal &amp;&amp; prim】

    畅通project再续 Problem Description 相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其它的小岛时都要通过划小船来实现. ...

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

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

  9. HDU - 1875 畅通工程再续

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

随机推荐

  1. Nice Garland CodeForces - 1108C (思维+暴力)

    You have a garland consisting of nn lamps. Each lamp is colored red, green or blue. The color of the ...

  2. SpringCloud微服务架构分布式组件如何共享session对象

    一.简单做一个背景说明1.为说明问题,本文简单微服务架构示例如下 2.组件说明分布式架构,每个组件都是集群或者主备.具体说明如下:zuul service:网关,API调用都走zuul service ...

  3. scrapy之多环境的选择使用

    scrapy之多环境的选择使用 个人主机主机上可能存在多个python环境,当在终端中使用scrapy时,容易产生错误,无法使用到自己想使用的那个python,如何解决这个问题呢? 出现这类问题时,直 ...

  4. python_超级基础

    初识计算机 CPU 计算机的大脑.中央处理单元,主要负责数据运算及计算,是运算计算中心. 存储器 内存 临时存储数据,供CPU运算使用. 优点: 读取速度快. 缺点: 容量小,成本高,断电即消失. 硬 ...

  5. 聊一聊跨域,Vue向Django请求数据的一些问题

    1.做前后端分离 前端使用Vue程序,后端使用Django配合rest-framework. 那么前端Vue通过API接口拿到数据会出现跨域的问题,JSONP只是在get中会用到的,所以这里使用cor ...

  6. Failure to transfer org.apache.maven:maven-archiver:pom:2.5 from https://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval o

    pom.xml报错: Failure to transfer org.apache.maven:maven-archiver:pom:2.5 from https://repo.maven.apach ...

  7. C#设计模式之9:模板方法

    模板方法 模板方法是一个方法,定义了算法的步骤,并允许子类为一个或多个步骤提供实现. 本例中用冲泡咖啡和茶的例子来说明: 上图说明了冲泡咖啡和茶的步骤,可以看出冲泡咖啡和茶的步骤差不多,很相似,先来看 ...

  8. python之路--网络通信协议

    一 . osi七层协议 互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层 二 . tcp三次握手和四次挥手 我们知道网络层,可以实现两个主机之间的通信.但是这并不具体,因为,真 ...

  9. python数据结构与算法第十二天【快速排序】

    1. 原理如图所示: 2.代码实现 def quick_sort(alist, start, end): """快速排序""" # 递归的退 ...

  10. Log4j2配置与使用

    依赖包: <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --> <depend ...