程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj2421 最小生成樹 克魯斯

poj2421 最小生成樹 克魯斯

編輯:C++入門知識

Constructing Roads Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 18744 Accepted: 7755

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

#include
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>a[i][j];
	for(int i=0;i>m;
	for(int i=0;i>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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved