HDU 1875 畅通工程再续 克鲁斯卡尔
来源:互联网 发布:网店转让 知乎 编辑:程序博客网 时间:2024/06/07 18:29
相信大家都听说一个“百岛湖”的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现。现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政府决定实现百岛湖的全畅通!经过考察小组RPRush对百岛湖的情况充分了解后,决定在符合条件的小岛间建上桥,所谓符合条件,就是2个小岛之间的距离不能小于10米,也不能大于1000米。当然,为了节省资金,只要求实现任意2个小岛之间有路通即可。其中桥的价格为 100元/米。
每组数据首先是一个整数C(C <= 100),代表小岛的个数,接下来是C组坐标,代表每个小岛的坐标,这些坐标都是 0 <= x, y <= 1000的整数。
2210 1020 2031 12 21000 1000
1414.2oh!
典型的最小生成树
注意double 最后应该用%f 输出,要不然会报错
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int t,n;const int M=110;struct edge{ int u,v; double cost;}e[M*M];double a[M],b[M];int cnt;int per[M],r[M];double disn(double a,double b,double c,double d){ double x=(double)(a-c)*(a-c); double y=(double)(b-d)*(b-d); return sqrt(x+y);}bool cmp(edge a,edge b){ return a.cost<b.cost;}void init(){ for(int i=0;i<=n;i++) per[i]=i,r[i]=1;}int finds(int x){ if(x==per[x]) return x; else { int t=per[x]; per[x]=finds(per[x]); r[x]+=r[t]; return per[x]; }}void unions(int a,int b){ int x=finds(a); int y=finds(b); if(x==y) return; per[y]=x; r[y]+=r[x];}int main(){ scanf("%d",&t); double ans; while(t--) { cnt=0; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%lf%lf",&a[i],&b[i]); } init(); for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { double len=disn(a[i],b[i],a[j],b[j]); if(len<10.0||len>1000.0) continue; e[cnt].u=i; e[cnt].v=j; e[cnt].cost=len; cnt++; } } ans=0.0; sort(e,e+cnt,cmp); int k=0; for(int i=0;i<cnt;i++) { if(finds(e[i].u)!=finds(e[i].v)) { unions(e[i].u,e[i].v); ans+=e[i].cost; k++; } } if(k<n-1) printf("oh!\n"); else printf("%.1f\n",ans*100); } return 0;}
阅读全文
0 0
- HDU 1875 畅通工程再续 克鲁斯卡尔
- hdu-1875-畅通工程再续(克鲁斯卡尔&&普利姆求最小生成树)
- HDU 1875 畅通工程再续 (克鲁斯卡尔_最小生成树)
- hdu 1233 还是畅通工程 (克鲁斯卡尔裸题)
- 克鲁斯卡尔算法 畅通工程再续 Truck History 畅通工程
- 继续畅通工程 1879 克鲁斯卡尔
- 畅通工程(克鲁斯卡尔算法)
- HDU 1879 继续畅通工程 (Prim(普里姆算法)+Kruskal(克鲁斯卡尔))
- HDU 1233还是畅通工程——克鲁斯卡尔算法(带并查集)
- 畅通工程 HDU杭电1863【克鲁斯卡尔Kruskal || Prim】
- HDU 1863 畅通工程 (克鲁斯卡尔—最小生成树)
- HDU 1233 还是畅通工程 (克鲁斯卡尔_最小生成树+贪心)
- HDU 1879 继续畅通工程 (克鲁斯卡尔_最小生成树)
- hdu-1879-继续畅通工程(克鲁斯卡尔求最小生成树)
- HDU-1233-还是畅通工程(最小生成树 克鲁斯卡尔)
- HDU——1233还是畅通工程(克鲁斯卡尔+优先队列)
- 【hdu 1863】畅通工程(最小生成树&克鲁斯卡尔算法模板)
- HUD OJ 1232 畅通工程 和 HDU OJ 1233还是畅通工程【并查集和克鲁斯卡尔算法】
- java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.dao
- Linux系统date命令的参数及获取时间戳的方法
- js页面刷新
- 冒泡排序
- Jstl中<c:forEach>标签及相关属性的总结
- HDU 1875 畅通工程再续 克鲁斯卡尔
- 字符串的组合
- Android百度地图(五):百度地图鹰眼sdk监控进出地理围栏(区域)
- 卡尔曼滤波
- PAT,IT届的托福,高分者直通名企面试
- SQLmap数据库注入攻击
- php 数组函数操作方法
- 模拟aloha协议
- 51单片机的中断系统(一)