标签:
3 0 990 692 990 0 179 692 179 0 1 1 2
179
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct graph{
int a,b;
int dis;
}G[10010];
int root[110];
int tp;
int cmp(graph u,graph v){
return u.dis<v.dis;
}
int findset(int x){
if(root[x]==x) return x;
return root[x]=findset(root[x]);
}
void unio(int i,int j){
int x,y;
x=findset(i);
y=findset(j);
if(x<=y) root[y]=x;
else root[x]=y;
return;
}
void kruskal(){
sort(G,G+tp,cmp);
int shortest=0;
for(int i=0;i<tp;++i){
int t,k;
t=findset(G[i].a);
k=findset(G[i].b);
if(t!=k){
shortest+=G[i].dis;
unio(t,k);
}
}
printf("%d\n",shortest);
return ;
}
int main(){
int n;
while(~scanf("%d",&n)){
memset(G,0,sizeof(G));
int i,j,q,aa,bb,d;
tp=0;
for(i=1;i<=n;++i) root[i]=i;
for(i=1;i<=n;++i){
for(j=1;j<=n;++j){
scanf("%d",&d);
G[tp].a=i;
G[tp].b=j;
G[tp].dis=d;
++tp;
}
}
scanf("%d",&q);
while(q--){
scanf("%d%d",&aa,&bb);
unio(aa,bb);
}
kruskal();
}
return 0;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
hdoj-1102-Constructing Roads【最小生成树】
标签:
原文地址:http://blog.csdn.net/qq_18062811/article/details/47037211