HDU 1875 畅通工程再续
2015-08-20 23:12
239 查看
题目大意:
中文题。
解题思路:
MST,判个距离,kruskal硬上就行。
中文题。
解题思路:
MST,判个距离,kruskal硬上就行。
#include<cstdio> #include<cstring> #include<string> #include<cmath> #include<iostream> #include<algorithm> #include<set> #define LL long long #define db double #define maxn 10000000 #define EPS 1e-15 #define max(a,b) ((a>b)?(a):(b)) #define min(a,b) ((a<b)?(a):(b)) using namespace std; int p[15000],x[200],y[200]; struct all { int u,v,r; double w; }e[15000]; int cmp(all x,all y){ return x.w<y.w; } db f(int x1,int x2,int y1,int y2){ return sqrt((db)((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))); } int find(int x){ while (x!=p[x]) x=p[x]; return x; } int main(){ int T; scanf("%d",&T); while (T--){ int k,cnt=1,sum=0; double ans=0; scanf("%d",&k); for (int i=1;i<=k;i++) scanf("%d%d",&x[i],&y[i]); for (int i=1;i<k;i++) for (int j=1;j<=k;j++){ db tmp; tmp=f(x[i],x[j],y[i],y[j]); if (tmp>=10.0 && tmp<=1000.0){ e[cnt].u=i; e[cnt].v=j; e[cnt].w=tmp; cnt++; } } for (int i=1;i<=cnt;i++) p[i]=i; sort(e+1,e+cnt,cmp); for (int i=1;i<=cnt;i++){ int X=find(e[i].u); int Y=find(e[i].v); if (X!=Y){ ans+=e[i].w; p[X]=Y; sum++; } } if (sum==k-1) printf("%.1lf\n",ans*100); else printf("oh!\n"); } return 0; }
相关文章推荐
- poj 1386 Play on Words(欧拉通路)
- [2015-08-19] python025
- centOS6.6升级gcc4.8
- centOS6.6升级gcc4.8
- centOS6.6升级gcc4.8
- centOS6.6升级gcc4.8
- Qt中设置widget背景颜色/图片的注意事项(使用样式表 setStyleSheet())
- Android WiFi 应用程序例子
- HDU 1879 继续畅通工程
- POJ 题目分类
- mac 启动nfsd共享
- Python正则表达式指南
- Apache ab测试 Apache优于 nginx
- HDU 题目分类
- Python线程指南
- 面试题,凑14,将数组中相加为14的数去除,并升序排列
- k数和 II
- Jboss配置远程调试
- 逆元模板
- 虚析构函数