Skip to content

Commit b85b131

Browse files
committed
BOJ_1949 : 우수 마을
1 parent 997bae2 commit b85b131

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

week13/BOJ_1949(우수 마을).java

+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import java.io.*;
2+
import java.util.*;
3+
4+
public class Main {
5+
6+
private static List<List<Integer>> tree;
7+
private static boolean[] visited;
8+
private static int[][] d;
9+
10+
public static void main(String[] args) throws IOException {
11+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
int N = Integer.parseInt(br.readLine());
13+
tree = new ArrayList<>();
14+
visited = new boolean[N+1];
15+
d = new int[N+1][2];
16+
for(int i=0; i<=N; i++) {
17+
tree.add(new ArrayList<>());
18+
}
19+
StringTokenizer st = new StringTokenizer(br.readLine());
20+
for(int i=1; i<=N; i++) {
21+
d[i][1] = Integer.parseInt(st.nextToken());
22+
}
23+
for(int i=0; i<N-1; i++) {
24+
st = new StringTokenizer(br.readLine());
25+
int v1 = Integer.parseInt(st.nextToken());
26+
int v2 = Integer.parseInt(st.nextToken());
27+
tree.get(v1).add(v2);
28+
tree.get(v2).add(v1);
29+
}
30+
visited[1] = true;
31+
dfs(1);
32+
System.out.println(Math.max(d[1][0], d[1][1]));
33+
}
34+
35+
public static void dfs(int n) {
36+
List<Integer> child = tree.get(n);
37+
for(int i=0; i<child.size(); i++) {
38+
int next = child.get(i);
39+
if(!visited[next]) {
40+
visited[next] = true;
41+
dfs(next);
42+
// d[i][0] = i 노드가 우수 마을이 아닌 경우
43+
// d[i][1] = i 노드가 우수 마을인 경우
44+
d[n][0] += Math.max(d[next][0], d[next][1]);
45+
d[n][1] += d[next][0];
46+
}
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)