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!

分析:看题意可以明白只要在任意个合法的桥之间加上边,进行最小生成树求解即可,注意要判断无法构成生成树的情况。
************************************
注意:不能用int提高精度判定,只能使用double..要不就会WA
#include<algorithm>
#include<stdio.h>
#include<string.h>
#include<queue>
#include<math.h>
using namespace std;

const int maxn = 105;
const double oo = 0x7fffffff;

double G[maxn][maxn];
struct point{int x, y;}p[maxn];

double Len(point a, point b)//求两个小岛的距离,不合法返回oo
{
    int x = a.x-b.x;
    int y = a.y-b.y;
    double l = sqrt(x*x + y*y);

if(l>=10.0 && l<=1000.0)
        return l;//合法范围
    return oo;
}
double Prim(int N)
{
    int vis[maxn]={0, 1};
    int i, T = N-1;
    double dist[maxn], ans = 0;

for(i=1; i<=N; i++)
        dist[i] = G[1][i];
    while(T--)
    {
        int k = -1;
        double mini = oo;

for(i=1; i<=N; i++)
        {
            if(!vis[i] && mini > dist[i])
                mini = dist[i], k=i;
        }

if(k == -1)return -1;
        vis[k] = true, ans += mini;

for(i=1; i<=N; i++)if(!vis[i])
            dist[i] = min(dist[i], G[k][i]);
    }

return ans;
}

int main()
{
    int T;

scanf("%d", &T);

while(T--)
    {
        int i, j, N;

scanf("%d", &N);

for(i=1; i<=N; i++)
            scanf("%d%d", &p[i].x, &p[i].y);

for(i=1; i<=N; i++)
        for(j=i; j<=N; j++)
        {
            if(j == i)G[i][j] = 0.0;
            else G[i][j] = G[j][i] = Len(p[i], p[j]);
        }

double ans = Prim(N);

if(ans < 0)
            printf("oh!\n");
        else
            printf("%.1f\n", ans*100 );
    }

return 0;

}

转载于:https://www.cnblogs.com/liuxin13/p/4676170.html

N - 畅通工程再续 - 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-1857 畅通工程再续

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

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

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

  5. HDOJ 1875 畅通工程再续

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

  6. 【1863】畅通工程 (HDU)

     畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  7. 畅通工程再续_MST(hdu 1875)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1875 Problem Description 相信大家都听说一个"百岛湖"的地方吧 ...

  8. HDU - 1875 畅通工程再续

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

  9. HDU 1875 畅通工程再续

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

最新文章

  1. 《你必须掌握的Entity Framework 6.x与Core 2.0》正式出版感想
  2. 写下今年1024的一篇文章
  3. 11月中30个精心设计的网站案例精选
  4. 【Clickhouse】Clickhouse Cannot create table with column ‘Int256‘ because experimental bigint types
  5. centos 6.5 x64 上安装mariadb10
  6. Ubuntu18.04之boost警告报错
  7. scala 排序接口Ordering
  8. 阶段1 语言基础+高级_1-3-Java语言高级_05-异常与多线程_第3节 线程同步机制_8_解决线程安全问题_Lock锁...
  9. Linux MPLS 初探
  10. 5.1 凸二次规划问题
  11. Could not read JSON: Cannot construct instance of `java.util.ArrayList$SubList`
  12. 资深工程师,专家,研究员等进阶
  13. 转载:电脑cmd命令怎么测试网速详细步骤
  14. p5.js 编程基础学习合集【2】
  15. 网络基础之计算机网络参考模型(OSI参考模型与TCP/IP协议簇)
  16. 简单的自动化测试模型(python+selenium)
  17. jquery 做一个小的倒计时效果
  18. 爬虫---国家食品药品监督管理总局
  19. 普通人如何做到“我命由我不由天”
  20. 仿QQ头像自定义截取功能

热门文章

  1. ***是如何能破解诸如美国中情局之类的密码
  2. 关于玻璃体捐献的想法
  3. flink的dataset/stream/sql三套API的选择以及是否应该阅读源码
  4. markdown单元格快速合并(不用自己写html代码)
  5. django-oscar接入paypal的时候提示Error 10001 - Internal Error
  6. 深度学习(三十五)——Style Transfer(2), YOLOv3, Tiny-YOLO, One-stage vs. Two-stage
  7. 可逆素数编程c语言,巧用C语言求四位的可逆素数
  8. java 扑克牌排序_java 怎么写compareto方法实现扑克牌排序
  9. Xtract 实现 VMware Vsphere 迁主机到 Nutanix cluster
  10. 如何提高天猫入驻成功率?掌握这两点即可