本文主要是介绍hdu 1102 Constructing Roads 最小生成树,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
把已经建好的路直接合并即可;
#include"stdio.h"
#include"string.h"
#include"stdlib.h"
#include"algorithm"
using namespace std;
int pre[1000];
struct point
{
int x,y,z;
}a[10000];
int cmp(point a,point b)
{
return a.z<b.z;
}
int find(int k)
{
if(k!=pre[k])
pre[k]=find(pre[k]);
return pre[k];
}
int main()
{
int m,n,i,j,k,h1,h2,t,sum;
while(scanf("%d",&m)!=EOF)
{
t=1;sum=0;
for(i=1;i<=m;i++)
pre[i]=i;
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
{
scanf("%d",&n);
if(i<=j)
{
a[t].x=i;
a[t].y=j;
a[t].z=n;
t++;
}
}
sort(a,a+t,cmp);
scanf("%d",&k);
while(k--)
{
scanf("%d%d",&h1,&h2);
h1=find(h1);
h2=find(h2);
if(h1!=h2)
pre[h2]=h1;
}
for(i=1;i<t;i++)
{
h1=find(a[i].x);
h2=find(a[i].y);
if(h1!=h2)
{
pre[h2]=h1;
sum+=a[i].z;
}
}
printf("%d\n",sum);
}
return 0;
}
这篇关于hdu 1102 Constructing Roads 最小生成树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!