杭电-1102Constructing Roads(最小生成树)
来源:互联网 发布:网络不好 英文 编辑:程序博客网 时间:2024/05/17 08:25
Constructing Roads
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 18054 Accepted Submission(s): 6878
Problem 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.
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.
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
30 990 692990 0 179692 179 011 2
Sample Output
179
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int map[110][110],per[110],m,n;struct node {int x,y,dis;}s[10000];void init(){for(int i=0;i<=n;i++)per[i]=i;}int find (int x){while(x!=per[x])x=per[x];return x;}bool join(int x,int y){int fx=find(x);int fy=find(y);if(fx!=fy){per[fx]=fy;return true;}return false;}bool cmp(node x,node y){return x.dis<y.dis;}int main(){int a,b,i,j,k;while(scanf("%d",&n)!=EOF){init();for(i=1;i<=n;i++)for(j=1;j<=n;j++)scanf("%d",&map[i][j]);scanf("%d",&m);for(i=0;i<m;i++){scanf("%d%d",&a,&b);map[a][b]=map[b][a]=0;}int t=0;for(i=1;i<=n;i++){for(j=i;j<=n;j++){s[t].x=i;s[t].y=j;s[t++].dis=map[i][j];}}sort(s,s+t,cmp);int sum=0;for(i=0;i<t;i++){if(join(s[i].x,s[i].y))sum+=s[i].dis;}printf("%d\n",sum);}return 0;}
0 0
- 杭电1102 Constructing Roads(最小生成树)
- 杭电 hdu 1102 Constructing Roads (最小生成树)
- 杭电-1102Constructing Roads(最小生成树)
- 【最小生成树+Prim】杭电 hdu 1102 Constructing Roads
- 杭电 1102 Constructing Roads 【最小生成树&&Kruskal】
- 杭电1102Constructing Roads(kruskal)(最小生成树)
- 【杭电oj】1102 - Constructing Roads(畅通工程,最小生成树)
- 杭电oj-1102 Constructing Roads(最小生成树Kruskal算法)
- HDOJ 1102 Constructing Roads(最小生成树)
- hdu 1102 Constructing Roads 最小生成树
- Constructing Roads - HDU 1102 最小生成树
- hdu 1102 Constructing Roads 最小生成树
- Constructing Roads(HDU 1102 最小生成树)
- hdu 1102 Constructing Roads 最小生成树
- HDU 1102 Constructing Roads 最小生成树
- hdoj 1102 Constructing Roads 【最小生成树】
- hdoj-1102-Constructing Roads【最小生成树】
- hdoj 1102 Constructing Roads 【最小生成树】
- cocos2d-x手机游戏内存优化
- leetcode-Binary Tree Maximum Path Sum
- 输入输出的进制问题
- rockchip rk30系列的i2c驱动分析——注意和三星写法有较大不同
- android--UI开发之--PagerSlidingTabStrip介绍及使用,让ViewPager更绚丽
- 杭电-1102Constructing Roads(最小生成树)
- 工作文档撰写——产品体验报告
- 对输入流 的一些认识
- 【Android】 今日问题记录2015/11/9
- 1031 Hello World for u
- Tiny6410学习之-烧写裸机程序失败问题
- IOS获取图片的方式以及图片的压缩
- JAVA中集合类说明及区别
- Java中多线程总结(上)