方老师的分身 IV 各种忧伤。。。暂时放一边。。。
WHITE ALBUM
最小生成树。
利用并查集把开始的安全房间先并在一起就可以了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int a[1001],n,m,k;
int father(int x)
{
if(x!=a[x])
a[x]= father(a[x]);
return a[x];
}
struct lx
{
int a,b,c;
}l[1001*501];
bool cmp(lx a,lx b)
{
return a.c<b.c;
}
int main()
{
while(scanf("%d%d%d",&n,&m,&k)!=EOF)
{
for(int i=0;i<=n;i++)
a[i]=i;
int fx;
scanf("%d",&fx);
for(int i=1;i<k;i++)
{
int tmp;
scanf("%d",&tmp);
a[tmp]=fx;
}
for(int i=0;i<m;i++)
scanf("%d%d%d",&l[i].a,&l[i].b,&l[i].c);
sort(l,l+m,cmp);
int ans=0;
for(int i=0;i<m;i++)
{
int fa=father(l[i].a);
int fb=father(l[i].b);
if(fa==fb)continue;
a[fb]=fa;
ans+=l[i].c;
}
printf("%d\n",ans);
}
}