Building Roads
来源:互联网 发布:数据分析软件spss 编辑:程序博客网 时间:2024/05/16 16:56
Memory Limit: 65536KTotal Submissions: 6364
Accepted: 1831
Description
Farmer John had just acquired several new farms! He wants to connect the farms with roads so that he can travel from any farm to any other farm via a sequence of roads; roads already connect some of the farms.
Each of the N (1 ≤ N ≤ 1,000) farms (conveniently numbered 1..N) is represented by a position (Xi,Yi) on the plane (0 ≤ Xi ≤ 1,000,000; 0 ≤Yi ≤ 1,000,000). Given the preexisting M roads (1 ≤ M ≤ 1,000) as pairs of connected farms, help Farmer John determine the smallest length of additional roads he must build to connect all his farms.
Input
* Line 1: Two space-separated integers:N and M
* Lines 2..N+1: Two space-separated integers: Xi andYi
* Lines N+2..N+M+2: Two space-separated integers: i and j, indicating that there is already a road connecting the farmi and farm j.
Output
* Line 1: Smallest length of additional roads required to connect all farms, printed without rounding to two decimal places. Be sure to calculate distances as 64-bit floating point numbers.
Sample Input
4 11 13 12 34 31 4
Sample Output
4.00
Source
#include<iostream>#include<cstdio>#include<cmath>using namespace std;double map[1001][1001];int N,M;double prim(){ bool vis[1001]={0}; double lw[1001],min,sum; int k; for(int i=1;i<=N;i++) lw[i]=map[1][i]; vis[1]=1; sum=0; for(int i=1;i<N;i++) { min=10000001; for(int j=1;j<=N;j++) if(!vis[j] && lw[j]<min) { min=lw[j]; k=j; } sum+=min; vis[k]=1; for(int j=1;j<=N;j++) if( !vis[j] && map[k][j]<lw[j]) lw[j]=map[k][j]; } return sum;}double dis(double x1,double y1,double x2,double y2){ return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}int main(){ double vx[1001],vy[1001],total; int n,m; while(scanf("%d%d",&N,&M) !=EOF) { for(int i=1;i<=N;i++) scanf("%lf%lf",&vx[i],&vy[i]); for(int i=1;i<=N;i++) for(int j=i+1;j<=N;j++) { double temp=dis(vx[i],vy[i],vx[j],vy[j]); map[i][j]=map[j][i]=temp; } for(int i=1;i<=M;i++) { scanf("%d%d",&n,&m); map[n][m]=map[m][n]=0; } total=prim(); printf("%.2lf\n",total); }}
- Building Roads
- POJ 3625 Building Roads
- POJ3625 Building Roads
- Building Roads(3625)
- poj 3625 Building Roads
- POJ 2749 Building Roads
- poj 2749 Building roads
- Pku 2749 Building roads
- poj3625 - Building Roads
- poj 3625 Building Roads
- poj 2749 building roads
- POJ 3625(Building Roads)
- poj 2749 Building roads
- CDOJ 1635 Building Roads
- HDU 3721 Building Roads
- poj 2749 Building roads
- HDU 3721 Building Roads
- POJ 3625 Building Roads
- 在lua里实现常量_类_继承_多态
- 互联网进一步普及 国内域名大赛火爆开赛
- 关于c:each问题
- log2
- 生活在潇洒与豁达的心境中
- Building Roads
- 选择排序法和冒泡排序法
- Optimus Support for Linux (installed in ubuntu 11.04)
- 2.window、document对象0806
- 批处理的问题
- 如何节约时间
- 我是如何节约时间的
- Linux操作系统 内核 介绍
- UltraIso not found