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 1100009 10 int father[N];11 12 int sum;13 14 struct no15 {16     int x,y;17 }di[N];18 19 struct node20 {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=0; i<=c; i++)65             father[i]=i;66 67         for(int i=0; i<c; i++)68         scanf("%d%d",&di[i].x, &di[i].y);69 70         if(c==1)71         {72             printf("0.0\n");73             continue;74         }75 76         int k=0;77 78         for(int i=0; i<c; i++)79             for(int j=i+1; 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 >= 10 && mi <= 1000)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=1;95         double sun=0;96 97         for(int i=0; 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*100);
108
109     }
110     return 0;
111 }

View Code

不甘心,自己再来一

 1 #include<cstdio>2 #include<cmath>3 #include<cstring>4 #include<algorithm>5 6 using namespace std;7 8 #define N 1100009
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 = 0; i <= n; i++)
60             p[i] = i;
61
62         for (int i = 0; i < n; i++)
63             scanf ("%d %d", &v[i].x, &v[i].y);
64
65         int k = 0;
66
67         for (int i = 0; i < n; i++)
68             for (int j = i+1; 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 >= 10 && mi <= 1000)
73             {
74                 d[k].a = i;
75                 d[k].b = j;
76                 d[k].l = mi;
77                 k++;
78             }
79         }
80
81         double num = 0;
82         s = 0;
83         sort(d, d+k, cmp);
84
85         for (int i = 0; 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-1)
93             printf ("oh!\n");
94         else
95             printf ("%.1f\n", 100*num);
96     }
97     return 0;
98 }

View Code

转载于:https://www.cnblogs.com/Aa948766160/p/5749952.html

HDU - 1875 畅通工程再续相关推荐

  1. HDOJ 1875 HDU 1875 畅通工程再续 ACM 1875 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址:          http://acm.hdu.edu.cn/showproblem.php?pid=1875 ...

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

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

  3. HDU 1875 畅通工程再续

    传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1875 简单的最小生成树 #include <iostream> #include <c ...

  4. HDOJ 1875 畅通工程再续

    这个畅通工程还是一交就过,看来畅通工程用来入门是最好了,以后拿这些来挂就不会那么打击人了,天天开心.这里求最小生成树之前要自己构图,很简单就是求出点到点之间的距离,如果距离大于1000和小于10都视作 ...

  5. HDU-1857 畅通工程再续

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

  6. HDU1875 畅通工程再续【Kruskal算法+并查集】

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

  7. HDOJ 1874 HDU 1874 畅通工程续 ACM 1874 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋 题目地址:          http://acm.hdu.edu.cn/showproblem.php?pid=1874 ...

  8. HDU 1874 畅通工程续 (Dijkstra , Floyd , SPFA, Bellman_Ford 四种算法)

    畅通工程续 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修 ...

  9. hdu 1874 畅通工程续(求最短距离,dijkstra,floyd)

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

最新文章

  1. Unity 简单示例代码和向导/Unity Aplication Block
  2. 新发现:高速下载Eclipse
  3. 2021合工大超越卷数二好题精选
  4. 数据量很大的排序问题 大量数据如何排序,没有做测试
  5. java ftp主动模式和被动模式_ftp主动模式和被动模式
  6. lambda中sorted排序
  7. C# 在自定义的控制台输出重定向类中整合调用方信息
  8. sql 中优化视图或sql语句的执行效率的方法
  9. springboot3——Email
  10. 用线性插值算法实现图像缩放
  11. java日期加一天_Java 关于日期加一天(日期往后多一天)
  12. CentOS6.5上增加中文字体库,确保前端WEB可以正常显示
  13. 电脑锁屏按什么键解锁_锁屏键除了锁屏还能干什么?这 6 个 App 带你玩转手机实体键...
  14. 如何将新的token发给前端比较好_前端工程师为什么要学习编译原理?
  15. Uniapp微信小程序视频全屏播放功能极简实现法
  16. iphone视图屏幕元素-像素大小 目前iphone,ipod touch 屏幕:320*480
  17. 《隐私政策》及《用户服务协议》
  18. 【问题】loadrunner运行场景时,用户卡在run状态,且退出时卡在gradual exiting状态
  19. 生鲜配送管理系统_升鲜宝V2.0 供应商协同系统设计思想及设计效果展现(一)...
  20. C++实现类似QT中的计时器QTime类(CQTime)

热门文章

  1. HTML之表格篇——表格的嵌套
  2. android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
  3. 基于 Bochs 的操作系统内核实现
  4. 数据结构:链表面试题
  5. 面向对象的程序设计——理解对象
  6. 2.14 文件和目录权限chmod
  7. 数据泄漏保护:你的企业的投资是否足够?
  8. 气候变迁给社会带来什么变化?
  9. eclipse安装weblogic Server服务器
  10. 导入android studio项目,编译失败