1 struct node {
2 int u, v, w;
3
4 bool operator<(const node &b) const {
5 return w < b.w;
6 }
7 }a[M];
8
9 int find(int x) {
10 if (x == f[x]) {
11 return x;
12 }
13 return f[x] = find(f[x]);
14 }
15
16 void union1(int x,int y) {
17 f[x] = y;
18 }
19
20 int main() {
21 scanf("%d%d", &n, &m);
22 for (int i = 1; i <= n; i++) {
23 f[i] = i;
24 }
25 for (int i = 1; i <= m; i++) {
26 scanf("%d%d%d", &a[i].u, &a[i].v, &a[i].w);
27 }
28 sort(a + 1, a + m + 1);
29 for (int i = 1; i <= m; i++) {
30 int x = find(a[i].u), y = find(a[i].v);
31 if (x != y) {
32 union1(x, y);
33 k++;
34 ans += a[i].w;
35 }
36 if (k == n - 1) {
37 break;
38 }
39 }
40 printf("%d\n", ans);
41 }