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

如今政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组RPRush对百岛湖的情况充分了解后,决定在符合条件的小岛间建上桥,所谓符合条件,就是2个小岛之间的距离不能小于10米。也不能大于1000米。

当然。为了节省资金。仅仅要求实现随意2个小岛之间有路通就可以。

当中桥的价格为 100元/米。

 
Input
输入包含多组数据。输入首先包含一个整数T(T <= 200),代表有T组数据。

每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标。代表每一个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
 
Output
每组输入数据输出一行。代表建桥的最小花费,结果保留一位小数。假设无法实现project以达到所有畅通,输出”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!

总共最多有100个节点。那么边最大100*100/2,把全部 符合题意 的边都求出来,然后就是最小生成树了。

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. #include <math.h>
  5. #include <stack>
  6. #define lson o<<1, l, m
  7. #define rson o<<1|1, m+1, r
  8. using namespace std;
  9. typedef long long LL;
  10. const int maxn = 105;
  11. const int mod = 1000000007;
  12. int n, t, fa[105];
  13. double q;
  14. struct C1{
  15. int st, en;
  16. double v;
  17. }ed[6000];
  18. struct C2 {
  19. int x, y;
  20. }in[105];
  21. double getdis(double x1, double y1, double x2, double y2) {
  22. return sqrt( (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2) );
  23. }
  24. bool cmp (C1 x, C1 y) {
  25. return x.v < y.v;
  26. }
  27. int Find (int x) {
  28. return x == fa[x] ? x : x = Find(fa[x]);
  29. }
  30. int main()
  31. {
  32. scanf("%d", &t);
  33. while(t--) {
  34. int n;
  35. scanf("%d", &n);
  36. for(int i = 0; i < n; i++) scanf("%d%d", &in[i].x, &in[i].y);
  37. int k = 0;
  38. for(int i = 0; i < n-1; i++)
  39. for(int j = i+1; j < n; j++) {
  40. double tmp = getdis(in[i].x, in[i].y, in[j].x, in[j].y);
  41. if(tmp >= 10 && tmp <= 1000) {
  42. ed[k].v = tmp*100;
  43. ed[k].st = i;
  44. ed[k++].en = j;
  45. }
  46. }
  47. sort(ed, ed+k, cmp);
  48. for(int i = 0; i <= 100; i++) fa[i] = i;
  49. double sum = 0;
  50. int cnt = 0;
  51. for(int i = 0; i <k; i++) {
  52. int pres = Find(ed[i].st), pree = Find(ed[i].en);
  53. if(pres != pree) {
  54. fa[pres] = pree;
  55. sum += ed[i].v;
  56. cnt++;
  57. if(cnt == n-1) break;
  58. }
  59. }
  60. if(cnt == n-1) printf("%.1lf\n", sum);
  61. else printf("oh!\n");
  62. }
  63.  
  64. return 0;
  65. }



HDU 1875 畅通project再续 (最小生成树 水)的更多相关文章

  1. hdu 1875 畅通project再续(kruskal算法计算最小生成树)

    畅通project再续 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tota ...

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

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

  3. hdu 1875 畅通project再续

    链接:hdu 1875 输入n个岛的坐标,已知修桥100元/米,若能n个岛连通.输出最小费用,否则输出"oh!" 限制条件:2个小岛之间的距离不能小于10米,也不能大于1000米 ...

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. CF 964C Alternating Sum

    给定两正整数 $a, b$ .给定序列 $s_0, s_1, \dots, s_n,s_i$ 等于 $1$ 或 $-1$,并且已知 $s$ 是周期为 $k$ 的序列并且 $k\mid (n+1)$,输 ...

  2. oracle 修改数据 保险方法

    oracle 中修改比较安全的方法:(pl/sql) 第一种方法: select * from temp where id=9 for update; 第二种方法: select t.*,rowid ...

  3. Hadoop体系所有组件默认端口列表

    Why? Hadoop集群组件太多,默认端口无法记住,有事后需要查看,就在这里罗列下这里包含我们使用到的组件:HDFS, YARN, Hbase, Hive, ZooKeeper。 What? 端口 ...

  4. float 及 overflow 的理解

    1.CSS 盒子模型: 2.float 支持属性:left right none inherit(部分支持) (1)float 属性影响范围:对紧随其后的块儿级元素起作用. (2)清除浮动常用方法:在 ...

  5. 使用vim修改和查看16进制文件

    使用前的准备工作,如果没有安装,使用命令安装: pacman -S vim 使用vim的十六进制功能查看和编辑文本文件,创建测试文件,使用命令如下: vim test.txt 进入“插入”模式,使用命 ...

  6. Building MFC application with /MD[d] (CRT dll version)requires MFC shared dll version

    解决方法:

  7. (21)Oracle表查询进阶

    转到基本查询 一.多表查询 笛卡尔积:每张表的列数相加,行数相乘. 连接条件:得出笛卡尔积后需要用where条件筛选出正确的数据.连接条件至少需要n张表减1个 1.等值连接 连接条件为等号 selec ...

  8. CentOS6.6升级openssl到1.0.2a

    如果安装的CentOS不是完整版,需要安装下面几个安装包 安装wget: yum -y install wget 安装Perl: yum install perl* 安装gcc: yum instal ...

  9. Topcoder SRM 664 DIV 1

    BearPlays 快速幂 题意: 给你两个数A,B,有种操作是将大的数减去小的数,并将小的数乘以2.反复k次,问你最后的小的数回是多少. 题解: 由于整个过程$A+B$的值是不会改变的.现在令$S= ...

  10. luogu P2744 [USACO5.3]量取牛奶Milk Measuring

    题目描述 农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位——译者注) 他的最好的牛奶,并把它装入一个大瓶子中卖出.消费者要多少,他就给多少,从不有 ...