HDU-1875-畅通工程再续【最小生成树】
来源:互联网 发布:单片机简介 编辑:程序博客网 时间:2024/05/03 01:48
题目链接:点击打开链接
畅通工程再续
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 24111 Accepted Submission(s): 7790
Problem Description
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现。现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组RPRush对百岛湖的情况充分了解后,决定在符合条件的小岛间建上桥,所谓符合条件,就是2个小岛之间的距离不能小于10米,也不能大于1000米。当然,为了节省资金,只要求实现任意2个小岛之间有路通即可。其中桥的价格为 100元/米。
Input
输入包括多组数据。输入首先包括一个整数T(T <= 200),代表有T组数据。
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
Output
每组输入数据输出一行,代表建桥的最小花费,结果保留一位小数。如果无法实现工程以达到全部畅通,输出”oh!”.
Sample Input
2210 1020 2031 12 21000 1000
Sample Output
1414.2oh!
关键是结构体的运用
#include<cstdio>#include<algorithm>#include<cmath>using namespace std;int fa[10000];struct stu{ int from,to; double al;}st[100000];bool cmp(stu a,stu b){ return a.al < b.al;}int find(int a){ int r=a; while(r != fa[r]) { r=fa[r]; } return r;}int main(){ int t; scanf("%d",&t); while(t--) { int c,a[10000],b[10000],i,j; scanf("%d",&c); for(i = 1 ; i<= c ; i++) { fa[i]=i; } for(i = 1 ; i <= c ;i++) { scanf("%d %d",&a[i],&b[i]); //数组a[]和数组b[]分别存放第i个岛的x,y坐标 } int num=0; for(i=1;i<c;i++) { for(j=i+1;j<=c;j++) { st[num].from=i; //结构体存放第i个岛和第j个岛于它们之间的距离 st[num].to=j; st[num++].al=sqrt((a[i]-a[j])*(a[i]-a[j])+(b[i]-b[j])*(b[i]-b[j])); } } sort(st,st+num,cmp); int k=0; double sum=0; for(i=0;i<num;i++) { if(k==c-1) { break; } if(find(st[i].from) != find(st[i].to) && st[i].al >=10 && st[i].al <= 1000) { fa[find(st[i].from)]=find(st[i].to); sum+=st[i].al; k++; } } if(k == c-1) //若找不到c-1条边则不能将岛都连起来 printf("%.1lf\n",sum*100); else printf("oh!\n"); } return 0; }
0 0
- hdu 1875 畅通工程再续(最小生成树Prim)
- hdu 1875 畅通工程再续(最小生成树Kruskal)
- hdu 1875畅通工程再续(最小生成树)
- hdu 1875畅通工程再续-prim最小生成树
- hdu 1875 畅通工程再续(最小生成树)
- hdu 1875 畅通工程再续(最小生成树)
- HDU 1875 畅通工程再续 最小生成树
- hdu 1875 畅通工程再续 最小生成树
- hdu 1875 畅通工程再续 最小生成树
- hdu 1875 畅通工程再续 (最小生成树)
- hdu 1875 畅通工程再续(图论:最小生成树)
- HDU 1875 畅通工程再续(最小生成树)
- HDU-1875-畅通工程再续-最小生成树
- hdu-1875-畅通工程再续-最小生成树
- HDU - 1875畅通工程再续-最小生成树
- Hdu 1875 畅通工程再续【最小生成树】
- hdu 1875 畅通工程再续 (最小生成树)
- HDU 1875 畅通工程再续(最小生成树)
- 封装的弹出视图的View
- BOOL 值在 debug 和 release 模式下初始化不一样!!!
- Objective-C中的便利初始化函数和便利构造器
- Gerrit Code Review - A Quick Introduction
- Google面试题 3| 矩阵中的最长上升路径
- HDU-1875-畅通工程再续【最小生成树】
- 【剑指offer】用两个栈实现队列
- 【Java学习】JavaIO-Reader Writer使用总结
- ErLang安装
- String,StringBuffer与StringBuilder的区别
- Design Twitter
- OSPF
- CSS盒模型[上]
- PHP 位运算符 &、|、^ 、~、〈〈 、〉〉