HDU 1120 Constructing Roads
来源:互联网 发布:天津测绘院待遇知乎 编辑:程序博客网 时间:2024/06/14 23:51
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.
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
Sample Output
179
题目大意:
首行给出N,接着是个N*N的矩阵,map[i][j]就代表i到j的权值。接着给出Q,下面Q行,每行两个数字A,B,代表A到B,B到A的权值为0。最后输出最小生成树的权值和就行。
C++
#include<iostream>#include<string.h>#include<cstdio>#define maxn 0x3f3f3f3fusing namespace std;int mat[110][110],n,m;void prim(){ int mst[110],i,j,minn,pos,low[110],sum=0; for(i=2;i<=n;i++) { low[i]=mat[1][i]; mst[i]=1; } low[1]=0; mst[1]=0; for(j=2;j<=n;j++) { minn=maxn; pos=0; for(i=2;i<=n;i++) { if(minn>low[i]&&mst[i]!=0) { minn=low[i]; pos=i; } } if(minn==maxn) { break; } mst[pos]=0; sum=sum+minn; for(i=2;i<=n;i++) { if(mat[pos][i]<low[i]&&mst[i]!=0) { low[i]=mat[pos][i]; } } } cout<<sum<<endl; return ;} int main() { int i,j,k,cost,i1,j1; while(cin>>n) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { scanf("%d",&mat[i][j]); } } scanf("%d",&m); for(k=0;k<m;k++) { scanf("%d %d",&i1,&j1); mat[i1][j1]=mat[j1][i1]=0; } prim(); } return 0; }
- HDU 1120 Constructing Roads
- HDU 1102 Constructing Roads
- HDU 1102 Constructing Roads
- Hdu-1102 Constructing Roads
- Hdu-1102 Constructing Roads
- hdu 1102 Constructing Roads
- HDU 1102 Constructing Roads
- hdu 1102 Constructing Roads
- hdu 1102 Constructing Roads
- HDU 1102 Constructing Roads
- HDU 1102 Constructing Roads
- HDU 1102 Constructing Roads
- hdu 1102 Constructing Roads
- Hdu 1102 - Constructing Roads
- hdu 1102 Constructing Roads
- HDU 1102 Constructing Roads
- HDU 1102 Constructing Roads
- hdu Constructing Roads
- 工业物联网(IIoT)数据库在铁路系统中的应用
- 今天开始用博客记录学习的过程
- 列表简介(python)
- Maven下的生成War包并部署
- 2018 AICon 全球人工智能技术大会团购票
- HDU 1120 Constructing Roads
- 安卓通过UDP协议传输数据,中文乱码的问题
- 安装 删除 卸载 Deb 包文件
- IOS push后隐藏返回按钮
- The run destination''''is not valid for Running the scheme
- 百度百科爬虫爬人物信息
- 模仿App后台切换到前台显示闪屏(广告)页面
- dubbo报错Data length too large: 10710120处理,及服务提供者协议配置详细说明
- weex 构建项目