uva10397
来源:互联网 发布:软件研发团队口号 编辑:程序博客网 时间:2024/06/08 01:19
#include <iostream>#include <math.h>#include <algorithm>#include <stdio.h>#include <string.h>using namespace std;struct Node{ double x,y;};Node node[800];int u[800*800];int v[800*800];double w[800*800];int p[800];int r[800*800];int n,m;int cmp(const int i,const int j){ return w[i]<w[j];}int find(int x){ return p[x]==x?x:p[x]=find(p[x]);}double kruskal(){ int x,y,i; double ans=0; for(i=1; i<=n; i++) p[i]=i; int edge; int n1,n2; for(i=1; i<m; i++) r[i]=i; sort(r+1,r+m,cmp); scanf("%d",&edge); for(int i=1; i<=edge; i++) { scanf("%d%d",&n1,&n2); int x=find(n1); int y=find(n2); if(x!=y) p[x]=y; } for(i=1; i<m; i++) { int e=r[i]; x=find(u[e]); y=find(v[e]); if(x!=y) { ans+=w[e]; p[x]=y;//模板的这个地方忘记修改了 } } return ans;}int main(){ // freopen("debug\\in.txt","r",stdin); // freopen("debug\\out.txt","w",stdout); while(~scanf("%d",&n)) { for(int i=1; i<=n; i++) { int x,y; scanf("%d%d",&x,&y);//不能直接输入到结构体里 node[i].x=x; node[i].y=y; } m=1; for(int i=1; i<=n; i++) for(int j=i+1; j<=n; j++) { u[m]=i; v[m]=j; double dx=node[i].x-node[j].x; double dy=node[i].y-node[j].y; w[m++]=sqrt(dx*dx+dy*dy); } printf("%.2lf\n",kruskal()); } return 0;}
阅读全文
0 0
- uva10397
- uva10397
- UVA10397- Connect the Campus
- UVa10397 Connect the Campus
- uva10397(并查集)
- uva10397 最小生成树
- uva10397 Connect the Campus
- UVa10397 连接校园(prim)
- uva10397 - Connect the Campus(连接校园)
- 有已知边的最小生成树Kruskal+Uva10397
- UVA10397 - Connect the Campus(最小生成树+并查集)
- 异常类处理2
- Java基础--FileDescriptor sync方法
- C语言常见的list一些编程练习
- Android Architecture Component之ViewModel源码分析
- 进程通信-信号signal
- uva10397
- 报错:对象不支持“trim”属性或方法
- World Wind入门
- 代理IP获取方式
- Docker常用命令
- maven添加在maven repository找不到的jar包
- 脚本检测同网段下ip占用情况
- dubbo-admin 在jdk8 tomcat8下启动错误解决
- JUnit4高级篇-由浅入深