카테고리 없음
트리 DP
kimximya
2024. 8. 8. 10:35
전처리
static class Edge
{
int next_node;
Edge next_edge;
Edge (int next_node, Edge next_edge)
{
this.next_node = next_node;
this.next_edge = next_edge;
}
}
int[] weight = new int[N+1];
int[][] dp = new int[N+1][2];
Edge[] graph = new Edge[N+1];
for (int i=1; i<=N-1; i++)
{
st = new StringTokenizer(input.readLine());
int u = Integer.parseInt(st.nextToken());
int v = Integer.parseInt(st.nextToken());
graph[u] = new Edge(v, graph[u]);
graph[v] = new Edge(u, graph[v]);
}
트리 DP
static void Tree_Dp (int[][] dp, int[] weight, Edge[] graph, int current_node, int parent)
{
dp[current_node][0] = 0;
dp[current_node][1] = weight[current_node];
for (Edge edge = graph[current_node]; edge != null; edge = edge.next_edge)
{
if ( edge.next_node != parent )
{
int next_node = edge.next_node;
Tree_Dp(dp, weight, graph, next_node, current_node);
dp[current_node][0] += Math.max(dp[next_node][0], dp[next_node][1]);
dp[current_node][1] += dp[next_node][0];
}
}
}