Skip to content

Commit

Permalink
12.30 : graph, MST(도시 분할 계획)
Browse files Browse the repository at this point in the history
  • Loading branch information
luckylooky2 committed Dec 30, 2023
1 parent 8efb0a9 commit 19f64a8
Showing 1 changed file with 45 additions and 0 deletions.
45 changes: 45 additions & 0 deletions baekjoon/1647.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
// 도시 분할 계획 : 그래프, 최소 스패닝 트리
const input = require("fs")
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n")
.map((v) => v.split(" ").map((v) => parseInt(v, 10)));
const [n, m] = input.shift();
const edges = input;
const parentArr = new Array(n + 1).fill(null).map((_v, i) => i);
let answer = 0;
let cnt = n;

function getParent(x, parentArr) {
if (parentArr[x] === x) return x;
else return getParent(parentArr[x], parentArr);
}

function union(a, b, parentArr) {
a = getParent(a, parentArr);
b = getParent(b, parentArr);

if (a > b) parentArr[a] = b;
else parentArr[b] = a;
}

function find(a, b, parentArr) {
a = getParent(a, parentArr);
b = getParent(b, parentArr);
return a === b;
}

const sorted = edges.sort((a, b) => a[2] - b[2]);

for (let [start, end, cost] of sorted) {
if (cnt === 2) break;
if (find(start, end, parentArr)) continue;
union(start, end, parentArr);
answer += cost;
// parentArr[x] = x가 아닌 개수
// 직접 parentArr에서 x가 아닌 개수를 세면 시간 초과
cnt--;
}

console.log(answer);

0 comments on commit 19f64a8

Please sign in to comment.