藍橋杯ALGO 4演算法訓練 結點選擇(樹形DP)

2021-10-21 04:46:05 字數 1186 閱讀 4850

問題描述

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

輸入格式

第一行包含乙個整數 n 。

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

接下來一共 n-

1 行,每行描述樹上的一條邊。

輸出格式

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

樣例輸入51

2345

1213

2425

樣例輸出

12樣例說明

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

+5=12 。

資料規模與約定

對於20

%的資料, n <=

20。對於50

%的資料, n <=

1000。

對於100

%的資料, n <=

100000。

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

#include

using

namespace std;

const

int n=

100010

,m=2

*n;int f[n][3

];//f[i][0]表示不選,f[i][1]表示選

int v[n]

;int h[n]

,e[m]

,ne[m]

,idx;

int ans;

int st[n]

;void

add(

int a,

int b)

void

dfs(

int u,

int father)

}int

main()

for(

int i=

1;i)int root=1;

while

(st[root]

)root++

;dfs

(root,-1

);//根節點

cout<<

max(f[root][1

],f[root][0

]);return0;

}

藍橋杯 演算法訓練 ALGO 4 結點選擇

本人是乙個剛剛接觸c 不久的傻學生 記錄一些自己的學習過程。大神路過可以批評指正 問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,...

藍橋杯 ALGO 4 結點選擇

演算法訓練 結點選擇 時間限制 1.0s 記憶體限制 256.0mb 問題描述 有一棵 n 個節點的樹,樹上每個節點都有乙個正整數權值。如果乙個點被選擇了,那麼在樹上和它相鄰的點都不能被選擇。求選出的點的權值和最大是多少?輸入格式 第一行包含乙個整數 n 接下來的一行包含 n 個正整數,第 i 個正...

藍橋杯 演算法訓練 ALGO 4 節點擊擇

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