๐ก ์ฌ๊ทํจ์๋ฅผ ์ฌ์ฉํด ์ต์ข ์ ์ผ๋ก ๊ตฌํ๋ ค๋ ๊ฑด๋ฌผ๋ถํฐ ์์ํ๋ค.
๐ก node ๋ฐฐ์ด์ index๋ ๊ฑด๋ฌผ ๋ฒํธ์ด๊ณ ๊ฐ์ ์ด ๊ฑด๋ฌผ์ ๊ฑด์คํ๊ธฐ ์ํด ์์ฑ๋์ด์ผํ๋ ๊ฑด๋ฌผ ๋ฒํธ๋ฅผ ์ ์ฅํ๋ค.
์ฝ๋
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const testCase = +input.shift();
for (let c = 0; c < input.length; c++) {
const [N, K] = input[c].split(" ").map(Number);
const sec = input[c + 1].split(" ").map(Number);
sec.unshift(0);
const node = Array.from(new Array(N + 1), () => []);
for (let k = 0; k < K; k++) {
const [X, Y] = input[c + 2 + k].split(" ").map(Number);
node[Y].push(X);
}
const dp = new Array(N + 1).fill(-1);
const dpValue = (index) => {
if (dp[index] !== -1) return dp[index];
if (node[index].length === 0) {
dp[index] = sec[index];
return sec[index];
} else {
let max = -1;
for (let i = 0; i < node[index].length; i++) {
if (max < dpValue(node[index][i])) max = dpValue(node[index][i]);
}
dp[index] = max + sec[index];
return max + sec[index];
}
};
console.log(dpValue(input[c + 2 + K]));
c = c + 2 + K;
}
์ข์ ๊ธ ๊ฐ์ฌํฉ๋๋ค. ์์ฃผ ๋ฐฉ๋ฌธํ ๊ฒ์ :)