HDU3405-World Islands
2015-08-20 10:46
477 查看
经过遍历生成树水过去了,还是不太理解为什么不能一次性kruskal然后少连接一条边来判断。数据略水。
#include<iostream> #include<cstring> #include<cstdio> #include<math.h> #include<vector> #include<algorithm> #include<queue> #include<set> #include<map> using namespace std; int pre[60]; int find(int x) { while(x!=pre[x]) x=pre[x]; return x; } double x[60],y[60]; struct e { int x,y; double z; }a[2600]; int cmp(e a,e b) { return a.z<b.z; } int main() { int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%lf%lf",&x[i],&y[i]); } double res=999999; for(int num=1;num<=n;num++) { for(int i=1;i<=n;i++) pre[i]=i; int edg=0; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(i==num||j==num) continue; a[edg].x=i; a[edg].y=j; a[edg++].z=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); } // printf("edg %d\n",edg); sort(a,a+edg,cmp); double ans=0; for(int i=0;i<edg;i++){ int dx=find(a[i].x); int dy=find(a[i].y); if(dx!=dy){ pre[dx]=dy; ans+=a[i].z; } } res=min(res,ans); } printf("%.2f\n",res); } return 0; }
相关文章推荐
- Ubuntu下mysql忘记root密码
- lzo-2.09源码官方下载地址
- Libevent源码分析-event_base
- UVa 514 Rails(经典栈)
- Java虚拟机详解04----GC算法和种类【重要】
- css3 div垂直居中
- Java虚拟机JVM学习07 类的卸载机制
- 修改npm包管理器的registry为淘宝镜像(npm.taobao.org)
- MongoDB的一些命令
- 2015暑假集训总结
- Python 之 元组小结
- hdoj 2544 最短路 【SPFA】
- mysql grant
- 构建高性能web之路------mysql读写分离实战
- oc Foundation框架 Number类 Array类
- Hdu Oj 2112 HDU Today
- Android操作HTTP实现与服务器通信
- 好炫的Lambda表达式,Java党用起来!(最简易Lambda教程)
- 《从零开始学Swift》学习笔记(Day 3)——Swift 2.0之后增加的关键字
- 如何转换一些常见的文档格式