HDU 1875 畅通工程再续
来源:互联网 发布:探索者软件 编辑:程序博客网 时间:2024/05/20 05:28
最小生成树问题。
先存储各个点的值。
然后再计算边。最后生成树。
#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#define INF 100000001using namespace std;int a[101];struct lx{ int x,y; double c;}l[5001];struct site{ double x,y;}d[101];int intset(int n){ for(int i=0; i<=n; i++) a[i]=i;}int fa(int x){ if(x!=a[x]) x=fa(a[x]); return a[x];}bool cmpa(lx t1,lx t2){ return t1.c<t2.c;}int main(){ int n,m,t; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%lf%lf",&d[i].x,&d[i].y); int k=0; for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { double tmp=sqrt(pow(d[i].x-d[j].x,2)+pow(d[i].y-d[j].y,2)); if(tmp>=10&&tmp<=1000) { l[k].x=i,l[k].y=j; l[k].c=tmp,k++; } } sort(l,l+k,cmpa); intset(n); double ans=0; for(int i=0;i<k;i++) { int x,y; x=fa(l[i].x),y=fa(l[i].y); if(x!=y) { a[y]=x; ans+=l[i].c; } } int ok=0; for(int i=1;i<=n;i++) if(a[i]==i)ok++; if(ok>1)puts("oh!"); else printf("%.1lf\n",ans*100); }}
0 0
- HDU 1875 畅通工程再续
- HDU 1875 畅通工程再续
- acm hdu 1875 畅通工程再续
- hdu 1875 畅通工程再续 (kruskal)
- 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)畅通工程再续
- cvReshape比cvTranspose,cvGetRow,cvSetRow
- Android 图像缩略图及压缩图像
- 《自由从何而来》 读书笔记
- ASP.NET编写代码时出现“意外的字符”该怎么处理
- getCurrentSession 与 openSession() 的区别
- HDU 1875 畅通工程再续
- string 转 CString,CString 转 string
- Strutes2框架常量加载顺序
- Qt编译错误:GL/gl.h:No such file or directory
- 在Qt中如何使用QtDesigner创建的UI文件(一)
- JAVA自动创建多层文件目录
- linux启动流程分析
- 在Qt中如何使用QtDesigner创建的UI文件(二)
- 进程死锁及解决办法