今天A了好多畅通工程————hdu-1874再续畅通工程
来源:互联网 发布:数据库中的主键怎么设 编辑:程序博客网 时间:2024/05/24 04:52
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
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现。现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组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!
代码:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int maxn=5200;int u[maxn],v[maxn],st[maxn][2];int root[maxn];int r[maxn];double w[maxn];int cmp(int x,int y){return w[x]<=w[y];}void makeset(int n,int m){ int i; for(i=1;i<=n;i++) root[i]=i; for(i=1;i<=m;i++) r[i]=i;}int look(int x){ while(x!=root[x]) x=root[x]; return x;}double kruskal(int n,int m){ double ans=0; int i; makeset(n,m); sort(r+1,r+m+1,cmp); for(i=1;i<=m;i++) { int row=r[i]; int x=look(v[row]); int y=look(u[row]); if(x!=y&&w[row]>=10&&w[row]<=1000) {ans+=w[row]; root[x]=y; } } return ans;}int main(){ int m,n,i,k,p; double d; while(~scanf("%d",&k)) { while(k--) { int flag=0; p=1; scanf("%d",&n); for(i=1;i<=n;i++) {scanf("%d%d",&st[i][0],&st[i][1]);} m=n*(n-1)/2; for(int i=1;i<n;i++) for(int j=i+1;j<=n;j++) { u[p]=i;v[p]=j; w[p]=sqrt(1.0*(st[i][0]-st[j][0])*(st[i][0]-st[j][0])+1.0*(st[i][1]-st[j][1])*(st[i][1]-st[j][1])); p++; } d=kruskal(n,m)*100; for(i=1;i<=n;i++) if(root[i]==i) flag++; if(flag==1) { printf("%.1lf\n",d);} else printf("oh!\n"); } }}
- 今天A了好多畅通工程————hdu-1874再续畅通工程
- HDU——1874畅通工程续(邻接矩阵弗洛伊德)
- HDU 1874 畅通工程续——dijkstra
- dijkstra,bellman-ford,floyd,HDU—1874 畅通工程续
- HDU——1232 畅通工程
- HDU1232——畅通工程
- hdu1232——畅通工程
- HDU 1874 畅通工程续
- hdu 1874 畅通工程续
- hdu 1874 畅通工程续
- hdu 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- HDU 1874 畅通工程续
- hdu 1874 畅通工程续
- hdu 1874 畅通工程续
- 矩阵乘法 求斐波那契数列
- 数据挖掘著名学者的网站
- 《我的第一本c++书》学习笔记:STL之迭代器指针的使用注意事项
- POJ 1269 Intersecting Lines
- [smart210] Nand Flash K9F4G08U0B 的配置与读写控制(二)
- 今天A了好多畅通工程————hdu-1874再续畅通工程
- SQL Server 2008提示评估期已过期
- hdu 4632 Palindrome subsequence
- 分享职场心得《16》
- 2013多校联合4 1010 K-string (hdu 4641)
- string.xml 中显示特殊符号
- HDOJ 4635: Strongly connected
- Android Launcher 源码编译,图标显示不正常
- 根文件系统的建立