baekjoon 20260118
This commit is contained in:
parent
86fb20e8a2
commit
9715175652
50
code_study/Baekjoon/ts/1005_1.ts
Normal file
50
code_study/Baekjoon/ts/1005_1.ts
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
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"));
|
||||||
38
code_study/Baekjoon/ts/1005_2.ts
Normal file
38
code_study/Baekjoon/ts/1005_2.ts
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
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"));
|
||||||
Loading…
x
Reference in New Issue
Block a user