hdu 4463 Outlets 最小生成树
2015-08-16 17:55
288 查看
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <vector> #include <queue> #include <stack> #include <set> #include <map> #include <string> #include <math.h> #include <stdlib.h> using namespace std; const double inf=100000000; double ans,mp[105][105],x[105],y[105],lowcost[105]; int main() { int i,j,k,n,pn,pa; while(~scanf("%d",&n)) { if(n==0) break; scanf("%d%d",&pn,&pa); for(i=1;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]); for(i=1;i<=n;i++) for(j=1;j<=n;j++) mp[i][j]=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); ans=mp[pn][pa]; mp[pn][pa]=0; mp[pa][pn]=0; for(i=1;i<=n;i++) lowcost[i]=mp[1][i]; lowcost[1]=-1; for(i=1;i<=n;i++) { int v=-1; double minx=inf; for(j=1;j<=n;j++) { if(lowcost[j]!=-1&&minx>lowcost[j]) { minx=lowcost[j]; v=j; } } if(v!=-1) { ans+=minx; lowcost[v]=-1; for(j=1;j<=n;j++) { if(mp[v][j]<lowcost[j]) lowcost[j]=mp[v][j]; } } } printf("%.2lf\n",ans); } return 0; }
相关文章推荐
- Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
- 视图控制器知识点总结
- UltraISO制作U盘启动盘安装Win7/10系统攻略
- VC 实现 DNS 跳转,过滤特定网址实现跳转
- gcc编译出现undefined reference to 的问题
- android开发之Menu的使用
- fibonacci数列的和取余(1)
- java中的动态代理
- Leetcode -- Partition List
- (剑指offer)JAVA实现
- 持续集成
- weblogic12.1.3的安装及更新
- 课后作业11--使用SQL语句创建一个数据库
- tabix
- 安卓飞机大战(二) SurfaceView实现自制背景
- MVC JsonResult的用法
- JAVA语言的特点:C++--
- 如何高效产生m个n范围内的不重复随机数(m<=n)
- Xcode相关及Xib封装之论述
- 相机开发(聚焦、横竖屏拍照、照片存储、连续拍照等)