Skip to content

Commit 19552ca

Browse files
authored
Merge pull request #916 from AlgorithmWithGod/JHLEE325
[20250918] BOJ / G3 / 게임 개발 / 이준희
2 parents e4df650 + c4adcea commit 19552ca

File tree

1 file changed

+62
-0
lines changed

1 file changed

+62
-0
lines changed
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
```java
2+
import java.io.*;
3+
import java.util.*;
4+
5+
public class Main {
6+
static int n;
7+
static int[] buildTime;
8+
static List<Integer>[] require;
9+
static int[] dp;
10+
static boolean[] visited;
11+
12+
public static void main(String[] args) throws IOException {
13+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
14+
StringTokenizer st;
15+
16+
n = Integer.parseInt(br.readLine());
17+
buildTime = new int[n + 1];
18+
require = new ArrayList[n + 1];
19+
dp = new int[n + 1];
20+
visited = new boolean[n + 1];
21+
22+
for (int i = 1; i <= n; i++) {
23+
require[i] = new ArrayList<>();
24+
}
25+
26+
for (int i = 1; i <= n; i++) {
27+
st = new StringTokenizer(br.readLine());
28+
buildTime[i] = Integer.parseInt(st.nextToken());
29+
30+
while (true) {
31+
int pre = Integer.parseInt(st.nextToken());
32+
if (pre == -1) break;
33+
require[i].add(pre);
34+
}
35+
}
36+
37+
StringBuilder sb = new StringBuilder();
38+
for (int i = 1; i <= n; i++) {
39+
sb.append(dfs(i)).append("\n");
40+
}
41+
System.out.print(sb);
42+
}
43+
44+
static int dfs(int i) {
45+
if (visited[i]) return dp[i];
46+
47+
if (require[i].isEmpty()) {
48+
dp[i] = buildTime[i];
49+
} else {
50+
int maxPre = 0;
51+
for (int pre : require[i]) {
52+
maxPre = Math.max(maxPre, dfs(pre));
53+
}
54+
dp[i] = maxPre + buildTime[i];
55+
}
56+
57+
visited[i] = true;
58+
return dp[i];
59+
}
60+
}
61+
62+
```

0 commit comments

Comments
 (0)