poj2421Constructing Roads-最小生成树prim
2012-12-23 20:28
239 查看
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
Sample Output
//汗,一连做几个题目都是最小生成树的,总的思想不变,格式稍稍变化,而对于这题的话,就是有些路已经建好了的,不需要你考虑在内的,那么就把已经建好了的初始化一下~还有就是无向图。所以map[a][b]=map[b][a]=0;
水水的代码:
Time Limit: 2000MS | Memory Limit: 65536K | |
Total Submissions: 16680 | Accepted: 6806 |
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
//汗,一连做几个题目都是最小生成树的,总的思想不变,格式稍稍变化,而对于这题的话,就是有些路已经建好了的,不需要你考虑在内的,那么就把已经建好了的初始化一下~还有就是无向图。所以map[a][b]=map[b][a]=0;
水水的代码:
#include<cstdio> #include<cmath> #include<string> #include<cstring> #include<algorithm> #include<iostream> #include<cstring> using namespace std; #define inf 9999 int vis[1001]; int map[101][101]; int dis[101]; int n; int Q; int a,b; int Prim(){ memset(vis,0,sizeof(vis)); int sum=0; int k; for(int i=1;i<=n;i++) dis[i]=map[1][i]; vis[1]=1; for(int i=1;i<n;i++){ int min=inf; for(int j=1;j<=n;j++) if(!vis[j]&&dis[j]<min){ min=dis[j]; k=j; } sum+=dis[k]; vis[k]=1; for(int j=1;j<=n;j++){ if(!vis[j]&&map[k][j]<dis[j]){ dis[j]=map[k][j]; } } } return sum; } /*void init(){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) map[i][j]=inf; }*/ int main(){ while(cin>>n){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>map[i][j]; cin>>Q; for(int k=1;k<=Q;k++){ cin>>a>>b; map[a][b]=map[b][a]=0; } cout<<Prim()<<endl; } return 0; }
相关文章推荐
- POJ 2349 Arctic Network(最小生成树 kruscal or prim)
- 构造最小生成树的 prim 算法
- prim 算法笔记 最小生成树
- POJ 1258 prim模版求最小生成树
- 关于最小生成树的 prim 算法
- POJ 1258 Agri-Net 最小生成树 prim
- prim最小生成树算法
- 河南第八届省赛(引水工程)(Prim求最小生成树)
- 8-06. 畅通project之局部最小花费问题(35)(最小生成树_Prim)(ZJU_PAT)
- POJ 2485:Highways:典型prim最小生成树(2)
- hdoj 1233 还是畅通工程【最小生成树 kruskal && prim】
- HDOJ 1301 Jungle Roads 最小生成树 kruskal && prim
- POJ 1258 - Agri-Net(最小生成树 Prim)
- 最小生成树-Prim及Kruskal
- POJ 2235 Frogger 最小生成树 Kruskal && Prim
- PKU3026最小生成树+BFS+prim
- poj 2031 Building a Space Station 【最小生成树 Prim】
- QS Network (最小生成树——prim方法)
- hdu1102最小生成树(prim)
- 图结构练习——最小生成树(Prim+Kruskal)