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

    相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现。现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组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!
    代码:
    思路正确,就是一编译就弹出一页程序,学长说stl调用有问题,我还未找到...代码先放着,慢慢找
     1 #include<cstdio>
     2 #include<math.h>
     3 #include<algorithm>
     4 using namespace std;
     5 int par[110];
     6 struct note
     7 {
     8     int st;
     9     int endd;
    10     int quan;
    11 }p[101];
    12 struct xy
    13 {
    14     int x;
    15     int y;
    16 }q[101];
    17 bool cmp(note x,note y)
    18 {
    19     return x.quan<y.quan;
    20 }
    21 double distance(xy a,xy b)
    22 {
    23     double sum;
    24     sum=sqrt((double)(a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    25     return sum;    
    26 }
    27 int pan(double x)
    28 {
    29     if(x>=10&&x<=1000)
    30         return 1;
    31     else return 0;
    32 }
    33 
    34 int find(int x)
    35 {
    36     if(x!=par[x])
    37       return par[x]=find(par[x]);
    38     return par[x];  
    39 }
    40 void unite(int a,int b)
    41 {
    42     int fa=find(a);
    43     int fb=find(b);
    44     if(fa!=fb)
    45       {
    46           par[fa]=fb;
    47       }
    48 }
    49 int main()
    50 {
    51     int t,n;
    52     scanf("%d",&t);
    53     while(t--)
    54     {
    55         scanf("%d",&n);
    56         for(int i=1;i<110;i++)
    57           par[i]=i; 
    58         for(int i=1;i<=n;i++)
    59           scanf("%d %d",&q[i].x,&q[i].y);
    60         int k=1;  
    61         for(int i=1;i<=n;i++)
    62           for(int j=i+1;j<=n;j++)
    63             {
    64                 double m=distance(q[i],q[j]);
    65                 if(pan(m))
    66                 {
    67                     p[k].st=i;
    68                     p[k].endd=j;
    69                     p[k++].quan=distance(q[i],q[j]);
    70                     
    71                 }   
    72                       
    73             } 
    74         sort(p+1,p+k,cmp);        
    75         double money=0;        
    76         for(int i=1;i<k;i++)
    77         {
    78             if(find(p[i].st)!=find(p[i].endd))
    79             {
    80                 unite(p[i].st,p[i].endd);
    81                 money+=p[i].quan*100;
    82             }    
    83         } 
    84         int flag=0;
    85         for(int i=1;i<k;i++)
    86           if(i==par[i])
    87             flag++;
    88         if(flag==1)
    89            printf("%.1lf
    ",money);
    90          else printf("oh!
    ");              
    91                 
    92           
    93     }
    94     return 0;
    95 }
     
  • 相关阅读:
    Spring事务管理学习笔记
    写给初学前端工程师的一封信
    angularjs 自定义指令弹窗
    ng-if和ng-show的区别
    前端遇到的一些坑
    浏览器样式兼容总结
    百分比控制表格列宽,不起效
    ng-model 将时间戳转换为标准时间
    使用git和sourcetree提交代码的一些问题
    本地运行angularjs应用,提示出现跨域问题
  • 原文地址:https://www.cnblogs.com/hss-521/p/7281872.html
Copyright © 2011-2022 走看看