#include<iostream>
#include<algorithm>
using namespace std;
struct node
{
int i,j;
int s;
};
bool cmp(node a,node b)
{
return a.s<b.s;
}
node a[1000000];
int pa[1000000];
int find(int t)
{
while(pa[t]!=t)
{
t=pa[t];
}
return t;
}
int main()
{
int n;
while(cin>>n)
{
int i,j;
int k=0;
for(i=1;i<=n;i++)
pa[i]=i;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
int t;
cin>>t;
if(i>j)
{
a[k].i=i;
a[k].j=j;
a[k].s=t;
k++;
}
}
}
sort(a,a+k,cmp);
int m;
cin>>m;
int mm=0;
for(i=1;i<=m;i++)
{
int t1,t2;
cin>>t1>>t2;
t1=find(t1);
t2=find(t2);
if(t1>t2)
{
pa[t1]=t2;
mm++;
}
else if(t1<t2)
{
pa[t2]=t1;
mm++;
}
}
int sum=0;
for(i=0;i<k;i++) //这里是k不是n wa了~~好几次~~
{
int t1,t2;
t1=find(a[i].i);
t2=find(a[i].j);
if(t1>t2)
{
pa[t1]=t2;
sum=sum+a[i].s;
mm++;
}
else if(t1<t2)
{
pa[t2]=t1;
sum=sum+a[i].s;
mm++;
}
if(mm==n-1)
break;
}
cout<<sum<<endl;
}
return 0;
}
hdu 1102
最新推荐文章于 2018-05-22 16:50:37 发布