hdu1875 畅通工程再续【最小生成树】
来源:互联网 发布:淘宝阿里旺旺卖家版 编辑:程序博客网 时间:2024/06/10 14:32
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1875
题意:中文题
解析:建图后直接跑kruskal最小生成树,然后判断并查集后有是否有多个集合
#include <bits/stdc++.h>using namespace std;const int maxn = 1e5+100;struct node{ int u,v; double c; node() {} node(int _u,int _v,double _c) { u = _u; v = _v; c = _c; } bool operator < (const node &b)const { return c<b.c; }}res[maxn];struct point{ double x,y;}a[maxn];double dis(point p1,point p2){ return sqrt((p1.x-p2.x)*(p1.x-p2.x)+(p1.y-p2.y)*(p1.y-p2.y));}int fa[maxn];int getFa(int x){ if(x==fa[x]) return fa[x]; return fa[x] = getFa(fa[x]);}int main(void){ int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=0;i<=n;i++) fa[i] = i; for(int i=1;i<=n;i++) scanf("%lf %lf",&a[i].x,&a[i].y); int cnt = 0; for(int i=1;i<=n;i++) { for(int j=i+1;j<=n;j++) { double d = dis(a[i],a[j]); if(d>=10 && d<=1000) res[cnt++] = node(i,j,d*100.0); } } sort(res,res+cnt); double ans = 0; for(int i=0;i<cnt;i++) { int t1 = getFa(res[i].u); int t2 = getFa(res[i].v); if(t1!=t2) { ans += res[i].c; fa[t1] = t2; } } cnt = 0; for(int i=1;i<=n;i++) { if(fa[i]==i) cnt++; } if(cnt>1) puts("oh!"); else printf("%.1f\n",ans); } return 0;}
阅读全文
0 0
- 最小生成树 Prim hdu1875 畅通工程再续
- 最小生成树hdu1875再续畅通工程
- Hdu1875 - 畅通工程再续 - 最小生成树
- HDU1875 畅通工程再续 【最小生成树Prim】
- hdu1875畅通工程再续【最小生成树】
- hdu1875 畅通工程再续(最小生成树kruskal算法)
- HDU1875-畅通工程再续-最小生成树
- hdu1875 畅通工程再续 (KRUSKAL求最小生成树)
- 最小生成树模板题 HDU1875 畅通工程再续
- hdu1875 畅通工程再续【最小生成树】
- hdu1875 畅通工程再续 (最小生成树之prim 算法)
- ACM-最小生成树之畅通工程再续——hdu1875
- hdu1875 畅通工程再续 并查集+kruskal最小生成树
- hdu1875 畅通工程再续 最小生成树(prim算法)
- hdu1875——畅通工程再续(最小生成树)
- HDU1875 畅通工程再续(最小生成树,Prim,kruskal算法)
- HDU1875畅通工程之最小生成树——kruskal
- HDU1875 通畅工程再续 最小生成树
- 快速搭建lnmp
- 06_校门外的树
- HDU-1754 I Hate It
- Java进阶之路【代码篇】——《CleanCode》编程规则精编(5)对象和数据结构
- 策略模式
- hdu1875 畅通工程再续【最小生成树】
- POJ2186-Popular Cows
- Gcc 编译的背后
- 你应该知道的JAVA面试题
- 今日头条大数据岗笔试题一
- 程序员面试笔试经验技巧
- AndroidStudio-快捷键-格式化代码
- 警告:Xcode Warning: “no rule to process file
- Java进阶之路【代码篇】——《CleanCode》编程规则精编(6)错误处理