/*
* @Description: To iterate is human, to recurse divine.
* @Autor: Recursion
* @Date: 2022-03-20 21:33:53
* @LastEditTime: 2022-03-21 15:26:52
*/
#include<bits/stdc++.h>
using namespace std;
int N,M,sum,num;
int f[(int)1e6 + 10];
struct edge{
int u;
int v;
int w;
}e[(int)1e6+10];
void read()
{
cin >> N >> M;
int x,y,z;
for(int i = 1;i <= N;i ++)
cin >> e[i].u >> e[i].v >> e[i].w;
}
void init()
{
for(int i = 1;i <= M;i ++)
f[i] = i;
}
int find(int x)
{
if(x == f[x]) return x;
else{
return f[x] = find(f[x]);
}
}
bool cmp(edge x,edge y)
{
return x.w < y.w;
}
void Kruskal()
{
for(int i = 1;i <= M;i ++){
int x = find(e[i].u);
int y = find(e[i].v);
if(x == y) continue;
f[x] = find(y);
sum += e[i].w;
if(++ num == N-1) break;
}
}
int main()
{
read();
init();
sort(e + 1,e + 1 + M,cmp);
Kruskal();
cout << sum << endl;
}
P3366 【模板】最小生成树
于 2022-03-21 15:27:13 首次发布