給出一棵帶點權的樹,若選擇乙個點,那麼不能選擇這個點的父節點。求最大點權和。
很經典的一道樹形dp題目。當然dfs也應該可以過。設f[
i][0
/1]f
[i][
0/1]
表示選擇或不選擇第i
i個結點的最大點權和。那麼我們如果選擇了這個點,那麼它的子節點就不能選擇,就有方程:f[
i][1
]=∑j
=1so
n[i]
f[j]
[0]f
[i][
1]=j
=1∑s
on[i
]f[
j][0
]那如果不選這個點,那麼子節點擊或不選都可以,那麼:f[
i][0
]=∑j
=1so
n[i]
max(
f[j]
[1],
f[j]
[0])
f[i]
[0]=
j=1∑
son[
i]m
ax(f
[j][
1],f
[j][
0])
#include
#include
using
namespace std;
int n,x,y,f[
6001][
2],num[
6001
],a[
6001];
bool not_root[
6001];
mapint,
int>
,int
> son;
voiddp(
int x)
//遞迴
}int
main()
for(
int i=
1;i<=n;i++)if
(!not_root[i]
)//是根節點
}
洛谷 P1352 沒有上司的舞會
洛谷 p1352 沒有上司的舞會 某大學有n個職員,編號為1 n。他們之間有從屬關係,也就是說他們的關係就像一棵以校長為根的樹,父結點就是子結點的直接上司。現在有個周年慶宴會,宴會每邀請來乙個職員都會增加一定的快樂指數ri,但是呢,如果某個職員的上司來參加舞會了,那麼這個職員就無論如何也不肯來參加舞...
洛谷 P1352 沒有上司的舞會
原題 這道題我非常神奇賴皮的用了拓撲,實際上這是一道樹形dp,但是身為蒟蒻的我覺得拓撲可以寫,結果真的讓我水過了,哈哈哈 用乙個二維陣列模擬每個人參加或者不參加,從最底層的員工開始向上拓撲 by acer.mo include include includeusing namespace std i...
洛谷p1352 沒有上司的舞會
題目已經說了這是一棵樹,而這道題顯然不是重心或者lca之類的東西,所以我們考慮樹形dp。一句廢話 首先考慮如果節點i不去舞會時以i為根的子樹的快樂指數最大值,顯然就是每個以i的兒子為根的子樹的最大值之和。如果節點i參加舞會,那麼相應的最大值就是i的每個兒子都不去時,以i的兒子為根的最大值之和,再加上...