杭电1102Constructing Roads
来源:互联网 发布:曼威网络 编辑:程序博客网 时间:2024/05/21 11:29
Constructing Roads
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 17154 Accepted Submission(s): 6512
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
最小生成树,算是个模板题吧,那测试数据说,就是说有3个村庄,
第一个到第1个距离是0,第一个到第二个为990,第一个到第三个为692;
第二个到第一个是990,第二个到第二个是0,第二个到第三个是179;
第三个到第一个是692,第三个到第二个是179,第三个到第三个是0;
已经有1条路;
1到2通了路;
问把三个村庄连接起来,还需要最短修多长的路。
思路:已经修过的记为0;
附ac代码:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{int start;int end;int cost;}t[10010];int cmp(node a,node b){return a.cost<b.cost;}int per[1000];int find(int x){int r=x;while(r!=per[r])r=per[r];return r;}int join(int x,int y){int fx=find(x);int fy=find(y);if(fx!=fy){per[fx]=fy;return 1;}return 0;}int main(){int m,n,i,j,k,l,x,y;int a[101][101];while(scanf("%d",&n)!=EOF){for(i=0;i<1000;i++)per[i]=i;k=0;for(i=0;i<n;i++)for(j=0;j<n;j++){t[k].start=i+1;//start等于第一维+1; t[k].end=j+1;//end等于 第二维加1; scanf("%d",&a[i][j]);t[k].cost=a[i][j];k++;}scanf("%d",&l);while(l--){scanf("%d%d",&x,&y);for(i=0;i<k;i++)if(t[i].start==x&&t[i].end==y)//加一个查找,找到的话,当前的花费就变为0; {t[i].cost=0;break;}}sort(t,t+k,cmp);int sum=0;for(i=0;i<k;i++){if(join(t[i].start,t[i].end))sum=sum+t[i].cost;}printf("%d\n",sum);}return 0;}
0 0
- 杭电1102 Constructing Roads
- 杭电1102Constructing Roads
- 【杭电】[1102]Constructing Roads
- 杭电Hdu 1102 Constructing Roads
- 行电1102 Constructing Roads
- 【最小生成树+Prim】杭电 hdu 1102 Constructing Roads
- 杭电--1102--Constructing Roads--并查集
- 杭电1102 Constructing Roads(最小生成树)
- 杭电 hdu 1102 Constructing Roads (最小生成树)
- Constructing Roads HDU杭电1102【Kruscal || Prim】
- 杭电 1102 Constructing Roads 【最小生成树&&Kruskal】
- 杭电OJ 1102(Constructing Roads)解题报告
- 杭电-1102Constructing Roads(最小生成树)
- 杭电1102Constructing Roads(kruskal算法)
- 航电1102-Constructing Roads (prim)
- 杭电ACM1102——Constructing Roads
- 杭电1102Constructing Roads(kruskal)(最小生成树)
- 【杭电oj】1102 - Constructing Roads(畅通工程,最小生成树)
- TableView 注册 registerNib 和registerClass区别
- 【Lua】weak table
- 学习设计模式——工厂方法
- hdu 1879 继续畅通工程
- 28-反射机制-03-反射机制(获取Class对象的三种方式)
- 杭电1102Constructing Roads
- NOIP2014 无线网路发射器选址
- 加减 验证码
- 在Linux系统下重启Oracle服务
- (原创)ios提示用户去AppStore好评逻辑
- Truck History POJ 1789【Kruscal算法 || Prim】
- 源码 、补码、 反码的详解(转载)
- 黑马程序员——Java中集合框架总结
- Second Day