BOJ 1949번 우수 마을 ( DP, DFS ) JAVA
풀이
Tree 와 DP의 만남이랄까.
1번 노드를 Root로 잡고, DFS를 활용해서 문제의 답을 도출한다.
점화식은 아래와 같다.
dp[cur][1] += dp[child][0];
dp[cur][0] += Math.max(dp[child][0],dp[child][1]);
링크
https://www.acmicpc.net/problem/1949
소스 코드
package boj;
import java.util.ArrayList;
import java.util.Scanner;
public class Boj1949 {
static ArrayList<ArrayList<Integer>> map = new ArrayList<>();
static int n;
static int[] p;
static int[][] dp;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
p = new int[n + 1];
dp = new int[n + 1][2];
for (int i = 0; i <= n; i++) {
map.add(new ArrayList<Integer>());
}
for (int i = 1; i <= n; i++) {
p[i] = sc.nextInt();
}
for (int i = 0; i < n - 1; i++) {
int a, b;
a = sc.nextInt();
b = sc.nextInt();
map.get(a).add(b);
map.get(b).add(a);
}
dfs(1, 0);
int res = Math.max(dp[1][0], dp[1][1]);
System.out.println(res);
}
public static void dfs(int cur, int parent) {
for (int child : map.get(cur)) {
if (child != parent) {
dfs(child, cur);
dp[cur][1] += dp[child][0];
dp[cur][0] += Math.max(dp[child][0], dp[child][1]);
}
}
dp[cur][1] += p[cur];
}
}
'Algorithm' 카테고리의 다른 글
BOJ 1238번 파티 ( 다익스트라 ) JAVA (0) | 2021.04.08 |
---|---|
BOJ 2589번 보물섬 ( BFS, Brute Force ) JAVA (0) | 2021.04.08 |
BOJ 5014번 스타트링크 ( BFS ) JAVA (0) | 2021.04.07 |
BOJ 2169번 로봇 조종하기 ( DP ) JAVA (0) | 2021.04.06 |
BOJ 2098번 외판원 순회 ( DP ) JAVA (0) | 2021.04.05 |