代码:
#include<bits/stdc++.h>
using namespace std;
int n, m, k, fa[1000005], cnt = 0;
struct node
{
int u, v;
int w;
};
node e[1000005];
void add(int x, int y, int z)
{
e[++cnt].u = x;
e[cnt].v = y;
e[cnt].w = z;
return;
}
int cmp(node a, node b)
{
return a.w < b.w;
}
int getfa(int x)
{
if(x == fa[x])
{
return x;
}
else
{
fa[x] = getfa(fa[x]);
}
return fa[x];
}
void merge(int x, int y)
{
int xx = getfa(x);
int yy = getfa(y);
fa[xx] = yy;
return;
}
int kruskal()
{
int tot = 0;
int ret = 0;
sort(e + 1, e + cnt + 1, cmp);
for(int i = 1; i <= cnt; i++)
{
int uu = getfa(e[i].u);
int vv = getfa(e[i].v);
if(uu != vv)
{
fa[uu] = vv;
ret += e[i].w;
tot++;
}
if(tot == n - k)
{
return ret;
}
}
}
int main()
{
//ios::sync_with_stdio(false);
//cin.tie(0);
//cout.tie(0);
cin >> n >> m >> k;
for(int i = 1; i <= n; i++)
{
fa[i] = i;
}
int a, b, c;
for(int i = 1; i <= m; i++)
{
cin >> a >> b >> c;
add(a, b, c);
}
/*for(int i = 1; i <= n; i++)
{
add(0, i, 0);
}*/
int ans = kruskal();
cout << ans;
return 0;
}