POJ 3625 Building Road(Prim)
来源:互联网 发布:OVI浏览器java 编辑:程序博客网 时间:2024/06/05 12:40
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 and Yi
* Lines N+2..N+M+2: Two space-separated integers: i and j, indicating that there is already a road connecting the farm i 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 <cmath>#include <cstdio>using namespace std;#define MAXV 1005#define INF 1e12const int start = 1;bool visit[MAXV] = { false };double dist[MAXV];int preNode[MAXV];double graph[MAXV][MAXV];int vertex_size;int road_size;struct Point{ double x; double y;};Point pointArr[MAXV];double calDist( Point a, Point b ){ return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); }void prim(){ double res = 0.0; int nextIndex; int temp_node_num = vertex_size; for( int index = 1; index <= vertex_size; ++index ) dist[index] = graph[1][index]; for( int count_num = 1; count_num <= vertex_size; ++count_num ){ double minDistance = INF; int i; for( i = 1; i <= vertex_size; ++i ){ if( minDistance > dist[i] && !visit[i] ){ minDistance = dist[i]; nextIndex = i; } } visit[nextIndex] = true; for( i = 1; i <= vertex_size; ++i ){ if( graph[nextIndex][i] < dist[i] && !visit[i] ) dist[i] = graph[nextIndex][i]; } } for( int i = 1; i <= vertex_size; ++i ){ if( dist[i] != -1 ) res += dist[i]; } printf( "%.2lf\n", res ); }void init(){ cin >> vertex_size >> road_size; int i, j; for( i = 1; i <= vertex_size; ++i ) cin>>pointArr[i].x>>pointArr[i].y; for( i = 1; i <= vertex_size; ++i ){ for( j = 1; j <= vertex_size; ++j ){ graph[i][j] = graph[j][i] = calDist( pointArr[i], pointArr[j] ); } } for( i = 1; i <= road_size; ++i ){ int startPoint, endPoint; cin >> startPoint >> endPoint; graph[startPoint][endPoint] = -1; graph[endPoint][startPoint] = -1; }}int main(){ init(); prim(); return 0; }
- POJ 3625 Building Road(Prim)
- poj 3625 Building Roads (prim)
- POJ 3625 Building Roads(Prim水题)
- poj 3625 Building Roads-Prim(最小生成树)
- poj 2031--Building a Space Station(prim)
- POJ Building a Space Station <最小生成树(Prim)>
- POJ 2031:Building a Space Station (Prim)
- 【prim】 poj 2031 Building a Space Station
- POJ 2031:Building a Space Station【Prim】
- poj 2031 Building a Space station(prim)
- poj 2031 Building a Space Station(prim)
- POJ 3625(朴素prim)
- Poj Jungle Road (优先队列Prim算法) 解题报告
- poj 2031 Building a Space Station(prim)(基础)
- poj 2031 Building a Space Station 【最小生成树 Prim】
- Building a Space Station POJ 2031 【最小生成树 prim】
- Building a Space Station(Prim)
- Building Roads(prim 最小生成树)
- S3C44B0的中断模式
- 设计模式几大原则
- uva 10618 Tango Tango Insurrection (DP)WA
- Servlet的生命周期
- 从摄像头中检测脸并保存图像
- POJ 3625 Building Road(Prim)
- Vim配置 Vim+Ctags+Taglist+cscope
- 分布式服务框架 Zookeeper -- 管理分布式环境中的数据
- codeforces Coder
- Linux内核学习笔记之文件系统(六)
- gcc编译C程序的过程
- Power Linux 安装oracle 10g 问题
- 读书笔记:“集体智慧编程”之第三章:“发现群组”的 分级聚类
- 双系统的实现须知