• hdu 1875 畅通工程再续


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

    畅通工程再续

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


    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!
     
    题目大意:要找最小的花费,那么也就可以理解为最短的路就一定为最少花费了,这里多一个的限制条件多注意一下就好了。。就是2个小岛之间的距离不能小于10米,也不能大于1000米。注意是不大于和不小于!!!
    因为这里有限制条件,所以要使所有的路都连通,就需要标记一下,来看是否所有的路都走过~标记方法有很多,代码供参考。
     
     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cmath>
     4 using namespace std;
     5 double map[1010][1010],node[1010],s,Min;
     6 int m,flag;
     7 const double INF=999999;
     8 
     9 void prim()
    10 {
    11     int vis[1010]= {0};
    12     int tm=1,v=1;
    13     flag=0;
    14     s=0;
    15     vis[tm]=1;
    16     node[tm]=0;
    17     for (int k=1; k<=m; k++)
    18     {
    19         Min=INF;
    20         for (int i=1; i<=m; i++)
    21             if (!vis[i])
    22             {
    23                 //cout<<node[i]<<" "<<map[tm][i]<<endl;
    24                 if(node[i]>map[tm][i]&&map[tm][i]>=10&&map[tm][i]<=1000)
    25                     node[i]=map[tm][i];
    26                 if (Min>node[i])
    27                 {
    28                     Min=node[i];
    29                     v=i;
    30 
    31                 }
    32             }
    33         //s+=node[v];
    34         vis[v]=1;
    35         tm=v;
    36     }
    37     for (int i=1; i<=m; i++)
    38     {
    39         s+=node[i];
    40         if (node[i]!=INF)
    41             flag++;
    42     }
    43 }
    44 
    45 int main ()
    46 {
    47     int n,a[1010],b[1010];
    48     cin>>n;
    49     while (n--)
    50     {
    51         //memset (map,INF,sizeof (map));
    52         cin>>m;
    53         for (int i=1; i<=m; i++)
    54         {
    55             cin>>a[i]>>b[i];
    56         }
    57         for(int i=1; i<=m; i++)
    58         {
    59             node[i]=INF;
    60             for (int j=1; j<=m; j++)
    61             {
    62                 map[i][j]=map[j][i]=sqrt((double)((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j])));
    63             }
    64         }
    65         prim();
    66         if (flag==m)
    67             printf ("%.1lf
    ",s*100);
    68         else
    69             printf ("oh!
    ");
    70     }
    71     return 0;
    72 }
  • 相关阅读:
    k8s命令总结
    AttributeError: module 'enum' has no attribute 'IntFlag'
    程序员是如何思考的?
    2、Swift协程详解:用async函数替换回调
    7、Swift协程详解:异步函数的调度和GlobalActor
    6、Swift协程详解:属性隔离和Actor
    1、Swift协程详解:协程简介
    3、Swift协程详解:调用协程
    8、Swift协程详解:TaskLocal
    9、Swift协程详解:其他语言异步函数互调用
  • 原文地址:https://www.cnblogs.com/qq-star/p/3932559.html
Copyright © 2020-2023  润新知