File tree Expand file tree Collapse file tree 1 file changed +62
-0
lines changed
Expand file tree Collapse file tree 1 file changed +62
-0
lines changed Original file line number Diff line number Diff line change 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+ ```
You can’t perform that action at this time.
0 commit comments