[백준] 1717: 집합의 표현 Node.JS, JavaScript

0

Problem Solving

목록 보기
49/49

https://www.acmicpc.net/problem/1717

유니온파인드 알고리즘을 이용해서 0일경우 union을 해주고,
1일 경우 find를 통해 부모노드가 같은지 검사해준다.

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
});
let input = [];
rl.on("line", function (line) {
    input.push(line);
}).on("close", function () {
    solution(input);
    process.exit();
});

function solution(input) {
    const [N, M] = input.shift().split(" ").map(Number);
    const nodes = input.map((e) => e.split(" ").map(Number));
    const parents = new Array(N + 1).fill(-1);
    
    function find(x) {
        if (parents[x] < 0) return x;
        parents[x] = find(parents[x]);
        return parents[x];
    }

    function union(x, y) {
        x = find(x);
        y = find(y);
        if (x != y) {
            parents[x] = y;
        }
    }

    const answer = new Array();
    nodes.forEach(([type, x, y]) => {
        if (type === 0) union(x, y);
        else answer.push(find(x) === find(y) ? "YES" : "NO");
    });

    console.log(answer.join("\n"));
}

0개의 댓글