思维题
洛谷 T200118 童年
考虑进入一颗子树 u u u,使得该操作不会亏损苹果,至少需要的苹果数为 f u f_u fu。
dfs 遍历每个 u u u,考虑如何求出 f u f_u fu ,维护一个优先队列 q q q 和当前苹果数 c u r cur cur,初始 f u = − a i f_u=-a_i fu=−ai,按 f v f_v fv 的大小依次 bfs 遍历 u u u 子树的每个 v v v,如果 c u r < f v cur<f_v cur<fv ,即需要更多的苹果才可能赚到, f u ← f u + f v − c u r f_u \leftarrow f_u+f_v-cur fu←fu+fv−cur,否则 c u r ← c u r − f v cur \leftarrow cur-f_v cur←cur−fv,任意时刻如果 c u r ≤ f u cur\leq f_u cur≤fu 退出循环,如果 c u r cur cur 始终小于 f u f_u fu,即赚不到苹果, f u = i n f f_u=inf fu=