$Luogu$ $P1122$ 最大子树和

链接

背景

(Luogu) (P1122)

题意

给定一棵 (n) 个节点的无根树的 (n-1) 条边及 (n) 个点的权值 (val_i) ,求某棵子树的最大权值和。

解法

还是树形 (dp) 模板。
还是没有根的树。
为了方便,不妨设 (1) 号节点为根,则直接从 (1) 号点开始 (dfs) 出所有点的父亲即可。
不妨设 (f_x) 代表以 (x) 节点为根的子树的最大权值和。设边集为 (E) ,则有 (f_x=sum_limits{(x,y) in E} max { f_y,0 }+val_x) ,要求的不是 (f_1) !不是 (f_1) !不是 (f_1) !要求的东西是 (max_limits{i in [1,n]} f_i) !!!

细节

由于有负权值,记得把答案预设为 (-inf) 再更新。

代码

$View$ $Code$ ```cpp #include using namespace std; inline int read() { int ret=0,f=1; char ch=getchar(); while('9'
原文地址:https://www.cnblogs.com/Peter0701/p/11838039.html