내리갈굼 비용을 출력
자신 아래 노드들에 모두 값을 더해주는 것이므로
인접리스트를 만들어서 트리를 만들어주고 input갚으로 호출된 노드부터 leaf노드까지 싹다 더해주면 될 것 같았다... 테케는 맞는데 어떤 반례가 있나..?
const input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const [n, m] = input[0].split(" ").map(Number);
const graph = Array.from({ length: n + 1 }, () => []);
const arr = input[1].split(" ").map(Number);
for (let i = 1; i < m; i++) graph[arr[i]].push(i + 1);
// console.log(graph);
const ans = new Array(n + 1).fill(0);
for (let line = 2; line <= m + 1; line++) {
const v = input[line].split(" ").map(Number);
if (v[0] === 1) {
const [, i, w] = v;
// console.log("i, w", i, w);
dfs(i, w);
} else {
const [, i] = v;
console.log(ans[i]);
}
function dfs(cur, score) {
// console.log("cur", cur);
ans[cur] += score;
for (const next of graph[cur]) {
if (next === []) return;
dfs(next, score);
}
}
}
테케들을 돌려봤을때 답은 맞았는데 메모리초가, 런타임 에러가 뜬다....후우,,,,