๐ŸŽฒ ๋ฐฑ์ค€ 15681๋ฒˆ ํŠธ๋ฆฌ์™€ ์ฟผ๋ฆฌ

Jeongeunยท2023๋…„ 11์›” 4์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
128/186

๋ฐฑ์ค€ 15681๋ฒˆ

๐ŸŽจ ์ฐธ๊ณ  ์ฝ”๋“œ
๐Ÿ’Š ์ถœ๋ ฅ์„ ๋”ฐ๋กœ ํ•˜๋ฉด ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฏ€๋กœ ๋ฐฐ์—ด์— ์ €์žฅํ•œ ๋’ค join์„ ์‚ฌ์šฉํ•ด ํ•œ ๋ฒˆ์— ์ถœ๋ ฅํ•œ๋‹ค.

์ฝ”๋“œ

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const [N, R, Q] = input.shift().split(" ").map(Number);

const tree = [];

for (let i = 0; i < N - 1; i++) {
  const node = input[i].split(" ").map(Number);
  if (!tree[node[0]]) tree[node[0]] = [];
  if (!tree[node[1]]) tree[node[1]] = [];
  tree[node[0]].push(node[1]);
  tree[node[1]].push(node[0]);
}

const result = new Array(N + 1).fill(0);
const visited = new Array(N + 1).fill(0);

const dfs = (node) => {
  let count = 1;
  for (let i = 0; i < tree[node].length; i++) {
    const next = tree[node][i];
    if (visited[next]) {
      count += result[next];
    } else {
      visited[next] = 1;
      count += dfs(next);
    }
  }
  result[node] = count;
  return count;
};

visited[R] = 1;
dfs(R);

const answer = [];
for (let i = 0; i < Q; i++) {
  answer.push(result[Number(input[i + N - 1])]);
}
console.log(answer.join("\n"));

0๊ฐœ์˜ ๋Œ“๊ธ€