樹形DP 結點選擇

2021-06-20 23:25:28 字數 1143 閱讀 5325

問題描述

有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?

輸入格式

第一行包含乙個整數 n 。

接下來的一行包含 n 個正整數,第 i 個正整數代表點 i 的權值。

接下來一共 n-1 行,每行描述樹上的一條邊。

輸出格式

輸出乙個整數,代表選出的點的權值和的最大值。

樣例輸入5

1 2 3 4 5

1 21 3

2 42 5

樣例輸出

12樣例說明

選擇3、4、5號點,權值和為 3+4+5 = 12 。

資料規模與約定

對於20%的資料, n <= 20。

對於50%的資料, n <= 1000。

對於100%的資料, n <= 100000。

權值均為不超過1000的正整數。

[cpp]view plain

copy

#include

#include

#include

using

namespace

std;  

#define max 1000000

struct

node  

*head[max],tree[max];  

long

n,ptr,dp[max][2];  

long

vis[max],num[max];  

void

initial()  

void

addedge(

long

a, long

b)  

void

tree_dp( 

long

v)  

p=p->next;  

}  dp[v][1]+=num[v];  

}  int

main()  

tree_dp(1);  

cout<}  

return

0;  

}  

這是一道樹形dp的題目

更多樹形dp,可以去 中去學習

演算法訓練 結點選擇 樹形DP

問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,第 i 個正整數代表點 i 的權值。接下來一共 n 1 行,每行描述樹上的一條邊。...

藍橋杯 結點選擇 樹形dp

問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,第 i 個正整數代表點 i 的權值。接下來一共 n 1 行,每行描述樹上的一條邊。...

結點選擇(樹形動態規劃)

現在對於樹形動態規劃理解的還不是很透徹,只能先做幾個題目練習一下 本題很重要的兩個方面乙個是建樹,這個需要邊和點的相互配合,乙個點兩條邊的表示都要標記。第二個很重要的方面是動態規劃的變化,本題首先想到的一成一成的樹,要不是子集的結合,要不就是自己本身,上乙個點要不是自己本身,要不是自己和子節點的子節...