2026-01-18 20:14:19 +09:00

50 lines
1.4 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 indegree: number[] = new Array(N+1).fill(0);
let graph: number[][] = Array.from({length: N+1}, () => []);
for(let k=0; k<K; k++) {
const [X, Y]: number[] = input[idx++].split(" ").map(Number);
indegree[Y]++;
graph[X].push(Y);
}
const W: number = Number(input[idx++]);
let qu: number[] = new Array(N).fill(0);
let [front, rear]: number[] = [0,0];
let dp: number[] = new Array(N+1).fill(0);
for(let i=1; i<=N; i++) {
if(indegree[i] === 0) {
qu[rear++] = i;
dp[i] = build_time[i];
}
}
while(front < rear) {
const now: number = qu[front++];
if(now === W) break;
for(let next of graph[now]) {
indegree[next]--;
dp[next] = Math.max(dp[next], dp[now] + build_time[next]);
if(indegree[next]===0) {
qu[rear++] = next;
}
}
}
res.push(dp[W]);
}
console.log(res.join("\n"));