export {}; const input = require("fs").readFileSync(0).toString().trim().split("\n"); const [V, E]: number[] = input[0].split(" ").map(Number); let edges: number[][] = []; for(let edge of input.slice(1)) edges.push(edge.split(" ").map(Number)); let parent: number[] = Array.from({length: V+1}, (_, i) => i); let rank: number[] = new Array(V+1).fill(0); const find = (x: number): number => { if(x !== parent[x]) return parent[x] = find(parent[x]); return parent[x]; } const union = (x: number, y: number) => { x = find(x); y = find(y); if(x === y) return; if(rank[x] < rank[y]) [x, y] = [y, x]; parent[y] = x; if(rank[x] === rank[y]) rank[x]++; } const kruskal = (): number => { edges.sort((a,b) => a[2] - b[2]); let total_weight = 0; let edge_count = 0; for(let edge of edges) { const [u, v, w]: number[] = edge; if(find(u) !== find(v)) { union(u, v); total_weight += w; edge_count += 1; if(edge_count === V-1) break; } } return total_weight; } console.log(kruskal());