問題描述
有一棵 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 行,每行描述樹上的一條邊。...