HDU-4463-Outlets
来源:互联网 发布:单片机编程器的作用 编辑:程序博客网 时间:2024/05/17 23:21
HDU-4463-Outlets
http://acm.hdu.edu.cn/showproblem.php?pid=4463
已知两点相连,求最小生成树,第一次参加现场赛,各种悲剧。。。这题是我敲的,调试了半天才过。。。菜鸟伤不起哇。。。
#include<stdio.h>#include<string.h>#include<stdlib.h>#include<math.h>#define N 100struct node{int x;int y;double len;}bian[N*N];double dian[N][2];double map[N][N];int f[N];int n;int cmp(const void *a,const void *b){return (*(struct node *)a).len<(*(struct node *)b).len?-1:1;}void init(){int i;for(i=1;i<=n;i++)f[i]=i;}int find(int x){int r=x;while(f[r]!=r)r=f[r];f[x]=r;return r;}int merge(int x,int y){int fx,fy;fx=find(x);fy=find(y);if(fx!=fy){f[fx]=fy;return 1;}return 0;}int main(){int i,j,a,b,t,num;double ans;while(scanf("%d",&n),n){scanf("%d%d",&a,&b);for(i=1;i<=n;i++)scanf("%lf%lf",&dian[i][0],&dian[i][1]);t=0;ans=0;for(i=1;i<=n;i++)for(j=i+1;j<=n;j++){bian[t].x=i;bian[t].y=j;bian[t].len=sqrt((dian[i][0]-dian[j][0])*(dian[i][0]-dian[j][0])+(dian[i][1]-dian[j][1])*(dian[i][1]-dian[j][1]));map[i][j]=map[j][i]=bian[t++].len;}qsort(bian,t,sizeof(struct node),cmp);init();f[find(a)]=find(b);ans+=map[a][b];num=1;//已经有一条边了 for(i=0;i<t;i++){if((bian[i].x==a&&bian[i].y==b)||(bian[i].x==b&&bian[i].y==a))continue;if(merge(bian[i].x,bian[i].y)){num++;ans+=bian[i].len;}if(num==n-1) //如果加入了n-1条边,则构成最小生成树,结束循环break;}printf("%.2lf\n",ans);}return 0;}
- HDU-4463-Outlets
- hdu 4463 Outlets
- HDU-4463-Outlets
- hdu 4463 Outlets(prim)
- hdu 4463 Outlets
- HDU 4463 Outlets
- hdu 4463 Outlets
- HDU 4463 Outlets
- HDU 4463 Outlets【Prim】
- HDU 4463 Outlets
- HDU 4463 Outlets
- HDU-4463-Outlets
- hdu 4463 Outlets
- hdu——4463Outlets
- HDU 4463 Outlets (枚举)
- HDU-4463-Outlets -最小生成树
- hdu 4463 Outlets (次小生成树)
- HDU 4463 Outlets 最小生成树
- 对带括号的计算器的技术实现
- 第3讲 用户管理 目录结构
- 信号与槽..
- 贝叶斯分类测试
- 使用WinDBG进行双机内核调试
- HDU-4463-Outlets
- poj 1837 01背包
- Java把字符串中的数字删除的方法和判断字符串里面是否有汉字的方法
- ios学习--iphone 实现下拉菜单
- 第4讲 常用命令
- ThinkPad E40 取消FN功能键设置
- 2012_11月总结分享
- SharedObject 类型转换失败
- 第5讲 文件权限 用户组(1)