hdu1875 畅通工程再续
来源:互联网 发布:傲飞数据整合平台下载 编辑:程序博客网 时间:2024/05/16 06:13
http://acm.hdu.edu.cn/showproblem.php?pid=1875
刚开始,我读错了题目,理解为只要存在两个岛之间的距离小于10或者大于10000,就不能架桥,后来看了一下别人的代码,原来发现架桥的条件是,2个到之间的距离为大于=10,《=100
我用的是prim算法,复杂度为O(n*n)
代码:
#include<stdio.h>#include<math.h>#include<stdlib.h>#include<string.h>double Map[1500][1500];double lowcost[1500];double ans;int x[105],y[105];bool Flag;int i,j,t,k,s,f;void sum(int m){ for(i=1;i<m;i++) for(j=i+1;j<=m;j++) { s=x[i]-x[j]; f=y[i]-y[j]; t=s*s+f*f; if(t>1000000||t<100) Map[i][j]=Map[j][i]=19999.0; else Map[i][j]=Map[j][i]=sqrt((double)t); Map[i][i]=0.0; }}void prim(int x,int m){ double Min; for(i=1;i<=m;i++) lowcost[i]=Map[x][i]; for(i=1;i<m;i++) { Min=9999.0; for(j=1;j<=m;j++) { if(lowcost[j]&&lowcost[j]<Min) { Min=lowcost[j]; k=j; } } if(Min>1000.0) { Flag=0; break; } else ans+=Min; lowcost[k]=0; for(j=1;j<=m;j++) { if(lowcost[j]>Map[k][j]) lowcost[j]=Map[k][j]; } }}int main(){ int n,m; scanf("%d",&n); while(n--) { ans=0.0; Flag=1; scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d%d",&x[i],&y[i]); } sum(m); prim(1,m); if(Flag) printf("%.1lf\n",ans*100.0); else printf("oh!\n"); } return 0;}
0 0
- 畅通工程再续 hdu1875
- hdu1875 畅通工程再续
- HDU1875--畅通工程再续
- hdu1875-畅通工程再续
- HDU1875畅通工程再续
- HDU1875畅通工程再续
- hdu1875 畅通工程再续
- HDU1875畅通工程再续
- HDU1875 畅通工程再续
- HDU1875---畅通工程再续
- HDU1875( 畅通工程再续)
- hdu1875畅通工程再续
- HDU1875 畅通工程再续
- 畅通工程再续||HDU1875
- hdu1875 畅通工程再续
- HDU1875 畅通工程再续【Prim】
- HDU1875:畅通工程再续【Kruskal & Prim】
- hdu1875 畅通工程再续--prim
- MySQL 主从复制 详细讲解(一)
- 表格提交 前台校验单元格不能为空且为数字
- Hibernate缓存
- uva 101(线性表)
- U-boot在S3C2440上的移植详解
- hdu1875 畅通工程再续
- RequireJS入门
- C# Java间进行RSA加密解密交互(三)
- JAVA内存分配全面解析
- C# 判断32位还是64位系统的一个简单方法(当然目标平台不能是x86)
- libUV 写TCPServer
- java xipin 111qqqq
- Windows Server 2008 R2中关闭“IE增强的安全配置”
- Java基础入学考blog-1