forked from doocs/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSolution.ts
31 lines (31 loc) · 856 Bytes
/
Solution.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function minimumTime(n: number, relations: number[][], time: number[]): number {
const g: number[][] = Array(n)
.fill(0)
.map(() => []);
const indeg: number[] = Array(n).fill(0);
for (const [a, b] of relations) {
g[a - 1].push(b - 1);
++indeg[b - 1];
}
const q: number[] = [];
const f: number[] = Array(n).fill(0);
let ans: number = 0;
for (let i = 0; i < n; ++i) {
if (indeg[i] === 0) {
q.push(i);
f[i] = time[i];
ans = Math.max(ans, f[i]);
}
}
while (q.length > 0) {
const i = q.shift()!;
for (const j of g[i]) {
f[j] = Math.max(f[j], f[i] + time[j]);
ans = Math.max(ans, f[j]);
if (--indeg[j] === 0) {
q.push(j);
}
}
}
return ans;
}