#include <iostream>
#include <algorithm>
using namespace std;
struct road{
int a,b,distanc;
};
int T,n,m1,m2;
int root[100];
int rankk[100];
road grah[1001];
bool cmp(const road &a,const road &b)
{
return a.distanc<b.distanc;
}
int roott(int a)
{
if( a==root[a])
return a;
else
return root[a]=roott(root[a]);
}
void merge(int a,int b)
{
int roota=roott(a);
int rootb=roott(b);
if (rankk[roota]>rankk[rootb])
{
root[rootb]=roota;
}
else if (rankk[roota]<rankk[rootb])
{
root[roota]=rootb;
}
else
{
root[roota]=rootb;
rankk[rootb]++;
}
}
int main()
{
cin>>T;
while(T--)
{
cin>>n>>m1>>m2;
for (int i=0;i<n;i++)
{
root[i]=i;
}
int aa=0;
while (m1--)
{
int a1,a2;
cin>>a1>>a2;
grah[aa].a=a1;
grah[aa].b=a2;
grah[aa].distanc=0;
aa++;
}
while (m2--)
{
int a1,a2,a3;
cin>>a1>>a2>>a3;
grah[aa].a=a1;
grah[aa].b=a2;
grah[aa].distanc=a3;
aa++;
}
sort(grah,grah+aa,cmp);
for (int i=0;i<n;i++)
{
rankk[i]=0;
}
int sumofroad=0;
for (int i=0;i<aa;i++)
{
int begi=grah[i].a;
int endd=grah[i].b;
int weig=grah[i].distanc;
if(roott(begi)!=roott(endd))
{
merge(begi,endd);
sumofroad+=weig;
}
}
cout<<sumofroad<<endl;
}
return 0;
}
mid-term 1005 snow road
最新推荐文章于 2022-07-25 10:48:10 发布