2026-01-20 21:24:35 +09:00

44 lines
1.1 KiB
TypeScript

export {};
const input = require("fs").readFileSync(0).toString().trim().split("\n");
const N: number = Number(input[0]);
let graph: number[][] = Array.from({length: N+1}, () => []);
let build_time: number[] = new Array(N+1).fill(0);
let indegree: number[] = new Array(N+1).fill(0);
let complete_time: number[] = new Array(N+1).fill(-1);
for(let i=1; i<=N; i++) {
const line: number[] = input[i].split(" ").map(Number);
build_time[i] = line[0];
for(let prev of line.slice(1)) {
if(prev === -1) break;
indegree[i]++;
graph[prev].push(i);
}
}
let qu: number[] = new Array(N+1).fill(0);
let [front, rear]: number[] = [0,0];
for(let i=1; i<=N; i++) {
if(indegree[i] === 0) {
qu[rear++] = i;
complete_time[i] = build_time[i];
}
}
while(front < rear) {
const now: number = qu[front++];
for(let next of graph[now]) {
indegree[next]--;
complete_time[next] = Math.max(complete_time[next], complete_time[now] + build_time[next]);
if(indegree[next] === 0) {
qu[rear++] = next;
}
}
}
console.log(complete_time.slice(1).join("\n"));