#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
const int N=100005;
struct E{
int x,y,w;
}mem[N];
int n,m,k,x,y,w,r1,r2,c1,c2,cnt;
ll ans;
int f[N],g[N],c[N];
int find1(int k){
if (f[k]!=k) f[k]=find1(f[k]);
return f[k];
}
int find2(int k){
if (g[k]!=k) g[k]=find2(g[k]);
return g[k];
}
bool cmp(E a,E b){
return a.w<b.w;
}
int main(){
int i;
scanf("%d%d%d",&n,&m,&k);
for (i=1;i<=n;i++) scanf("%d",&c[i]);
for (i=1;i<=k;i++) g[i]=i;
for (i=1;i<=n;i++) f[i]=i;
for (i=1;i<=m;i++) scanf("%d%d%d",&mem[i].x,&mem[i].y,&mem[i].w);
sort(mem+1,mem+1+m,cmp);
for (i=1;i<=m;i++){
if (cnt==k-1) break;
x=find1(mem[i].x); y=find1(mem[i].y); w=mem[i].w;
if (x==y) continue;
f[x]=y; c1=c[x]; c2=c[y];
c[y]=c2?c2:c1;
if (c1&&c2){
c1=find2(c1); c2=find2(c2);
if (c1==c2) continue;
g[c1]=c2; ans+=1ll*w; cnt++;
}
else cnt++,ans+=1ll*w;
}
if (cnt!=k-1) ans=-1;
printf("%lld\n",ans);
return 0;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:35:26: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d",&n,&m,&k);
^
./Main.cpp:36:38: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for (i=1;i<=n;i++) scanf("%d",&c[i]);
^
./Main.cpp:39:66: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for (i=1;i<=m;i++) scanf("%d%d%d",&mem[i].x,&mem[i].y,&mem[i].w);
^