zoukankan      html  css  js  c++  java
  • HDU 1875 畅通工程再续

    畅通工程再续

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 26117    Accepted Submission(s): 8463

    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! 

    Author

    8600 

    Source

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

    Recommend

    lcy   |   We have carefully selected several similar problems for you:  1879 1863 1102 1272 1301 

     1 #include<cstring>
     2 #include<cstdio>
     3 #include<algorithm>
     4 #include<cmath>
     5 #include<iostream>
     6 using namespace std;
     7 const int maxn=105;
     8 int T,n,tot,fa[maxn];
     9 double MST=0;
    10 struct Node{
    11     int u,v;
    12     double w;
    13     bool operator < (const Node &a) const{
    14         return w<a.w;
    15     }
    16 }e[maxn*maxn];
    17 struct cool{
    18     int x,y;
    19 }c[maxn];
    20 void prepare(){
    21     for(int i=1;i<=n;i++)fa[i]=i;
    22     tot=0;MST=0;
    23     for(int i=1;i<=n;i++)
    24       scanf("%d%d",&c[i].x,&c[i].y);
    25 }
    26 int find(int x){
    27     if(x==fa[x]) return x;
    28     else return fa[x]=find(fa[x]);
    29 }
    30 void Kursual(){
    31     int cur=0;
    32     for(int i=1;i<=tot;i++){
    33         int rx=find(e[i].u),ry=find(e[i].v);
    34         if(rx!=ry){
    35             fa[rx]=ry;cur++;
    36             MST+=e[i].w;
    37         }
    38         if(cur==n-1)break;
    39     }
    40     if(cur==n-1)printf("%.1lf
    ",MST*100);
    41     else printf("oh!
    ");
    42 }
    43 int main()
    44 {
    45     scanf("%d",&T);
    46     while(T--){
    47         scanf("%d",&n);
    48         prepare();
    49         for(int i=1;i<=n;i++)
    50           for(int j=1;j<i;j++){
    51               int x1=c[i].x,x2=c[j].x,y1=c[i].y,y2=c[j].y;
    52               double d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
    53               if(d>=10&&d<=1000){
    54                   e[++tot].u=i;e[tot].v=j;e[tot].w=d;
    55             }
    56           }
    57         sort(e+1,e+tot+1);  
    58         Kursual();
    59     }
    60     return 0;
    61 }

    思路:检验是否能够生成最小生成树。

  • 相关阅读:
    andorid(3) 使用sqllite进行数据持久化
    android(1)--hello world中的layout与 onCreate()
    android(2)--listView
    linux 常用指令
    关于虚拟内存、驻留内存与共享内存——virt res shr之间的关系
    base64 和 md5
    python阿里云短信服务
    python邮件发送
    算法
    python3 字典
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6378156.html
Copyright © 2011-2022 走看看