#include <cstdio>
#include <algorithm>
using namespace std;
const int N = 2e5 + 7;
int prv[N], c[N];
struct TEdge {
int u, v, c;
} e[N];
inline bool operator < (const TEdge &e1, const TEdge &e2) {
return e1.c < e2.c;
}
int root(int u) {
return prv[u] ? prv[u] = root(prv[u]) : u;
}
bool dsu(int u, int v) {
return (u = root(u)) != (v = root(v)) ? prv[u] = v, true : false;
}
int main() {
int n, m, k; scanf("%d%d%d", &n, &m, &k);
for (int i = 1; i <= n; ++i) {
scanf("%d", &c[i]);
if (!c[i]) c[i] = k + i;
}
for (int i = 0; i < m; ++i)
scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].c);
sort(e, e + m);
int count_edge = 0;
long long res = 0;
for (int i = 0; i < m; ++i)
if (dsu(c[e[i].u], c[e[i].v])) {
res += e[i].c;
if (++count_edge == k - 1) {
printf("%lld", res);
return 0;
}
}
printf("-1");
return 0;
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:24:42: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int n, m, k; scanf("%d%d%d", &n, &m, &k);
^
./Main.cpp:26:21: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d", &c[i]);
^
./Main.cpp:30:45: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d", &e[i].u, &e[i].v, &e[i].c);
^