38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
export {};
|
|
const input = require("fs").readFileSync(0).toString().trim().split("\n");
|
|
const T: number = Number(input[0]);
|
|
let idx: number = 1;
|
|
|
|
let res: number[] = [];
|
|
|
|
for(let t=0; t<T; t++) {
|
|
const [N, K]: number[] = input[idx++].split(" ").map(Number);
|
|
const line1: number[] = input[idx++].split(" ").map(Number);
|
|
const build_time: number[] = Array.from({length: N+1}, (_,i) => i===0 ? 0 : line1[i-1]);
|
|
|
|
let prev_build: number[][] = Array.from({length: N+1}, () => []);
|
|
for(let k=0; k<K; k++) {
|
|
const [X, Y]: number[] = input[idx++].split(" ").map(Number);
|
|
prev_build[Y].push(X);
|
|
}
|
|
|
|
let dp: number[] = new Array(N+1).fill(-1);
|
|
|
|
const solve = (target : number): number => {
|
|
if(dp[target] === -1) {
|
|
let max_build_time: number = 0;
|
|
for(let prev of prev_build[target]) {
|
|
max_build_time = Math.max(max_build_time, solve(prev));
|
|
}
|
|
|
|
dp[target] = build_time[target] + max_build_time;
|
|
}
|
|
|
|
return dp[target];
|
|
};
|
|
|
|
const W: number = Number(input[idx++]);
|
|
res.push(solve(W));
|
|
}
|
|
|
|
console.log(res.join("\n")); |