poj2421 最小生成树 克鲁斯
2014-04-29 19:06
387 查看
Constructing Roads
Description
There are N villages, which are numbered from 1 to N, and you should build some roads such that every two villages can connect to each other. We say two village A and B are connected, if and only if there is a road between A and
B, or there exists a village C such that there is a road between A and C, and C and B are connected.
We know that there are already some roads between some villages and your job is the build some roads such that all the villages are connect and the length of all the roads built is minimum.
Input
The first line is an integer N (3 <= N <= 100), which is the number of villages. Then come N lines, the i-th of which contains N integers, and the j-th of these N integers is the distance (the distance should be an integer within
[1, 1000]) between village i and village j.
Then there is an integer Q (0 <= Q <= N * (N + 1) / 2). Then come Q lines, each line contains two integers a and b (1 <= a < b <= N), which means the road between village a and village b has been built.
Output
You should output a line contains an integer, which is the length of all the roads to be built such that all the villages are connected, and this value is minimum.
Sample Input
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 18744 | Accepted: 7755 |
There are N villages, which are numbered from 1 to N, and you should build some roads such that every two villages can connect to each other. We say two village A and B are connected, if and only if there is a road between A and
B, or there exists a village C such that there is a road between A and C, and C and B are connected.
We know that there are already some roads between some villages and your job is the build some roads such that all the villages are connect and the length of all the roads built is minimum.
Input
The first line is an integer N (3 <= N <= 100), which is the number of villages. Then come N lines, the i-th of which contains N integers, and the j-th of these N integers is the distance (the distance should be an integer within
[1, 1000]) between village i and village j.
Then there is an integer Q (0 <= Q <= N * (N + 1) / 2). Then come Q lines, each line contains two integers a and b (1 <= a < b <= N), which means the road between village a and village b has been built.
Output
You should output a line contains an integer, which is the length of all the roads to be built such that all the villages are connected, and this value is minimum.
Sample Input
3 0 990 692 990 0 179 692 179 0 1 1 2
#include<iostream> using namespace std; int a[101][101],n,father[101],m,x,y; int get_father(int p){ return father[p]=(father[p]==p? p:get_father(father[p])); } int main(){ cin>>n; for(int i=0;i<n;i++) for(int j=0;j<n;j++) cin>>a[i][j]; for(int i=0;i<n;i++)father[i]=i; cin>>m; for(int i=0;i<m;i++){ cin>>x>>y; father[get_father(x-1)]=get_father(y-1); } int sum=0; for(int k=1;k<=1000;k++) for(int i=0;i<n;i++) for(int j=0;j<n;j++) if(a[i][j]==k&&get_father(i)!=get_father(j)){ sum+=a[i][j]; father[father[i]]=father[j]; } cout<<sum<<endl; return 0; }
相关文章推荐
- 手游产品经理初探(一)logo的印象推广很重要
- 网页建站的路径问题
- 九度题目1024:畅通工程 2007年浙江大学计算机及软件工程研究生机试真题
- OpenCV2马拉松第6圈——非线性滤波
- CALayer之anchorPoint分析
- 《算法导论》笔记 第18章 18.2 对B树的基本操作
- OC语言自学《十二》---- OC(block、@property)
- 系统初始化脚本 用于新安装系统的首次调试
- 高可用集群HA及负载均衡集群LB的实现方法
- openldap使用
- 存储过程几个例子
- nfs连接时的一个错误
- CABasicAnimation 热门动画效果
- Android Zxing 添加闪光灯功能
- java并发编程之——CountDownLatch和CyclicBarrier的使用
- 图片操作,CoreImage、存储、截屏
- FLEX 截图crtmpserver服务器的rtmp流视频报 SecurityError: Error #2123
- 迪米特法则(Law of Demeter)
- habit
- 组合/聚合复用原则(Composition/Aggregation Principle)