首先,在结点 u u u放上 w [ u ] w[u] w[u]个石子后,出于贪心考虑,下一步一定会把 u u u的所有儿子 v v v上的石子收回手中。
转换题意:
记 c n t cnt cnt为当下树上的石子数,对每个结点 u u u可以执行一次操作:
- step1. c n t + = w [ u ] cnt+=w[u] cnt+=w[u]
- step2. c n t − = ∑ v ∈ s o n ( u ) w [ v ] cnt-=\sum_{v\in son(u)}w[v] cnt−=∑v∈son(u)w[v]
当且仅当对 u u u的所有儿子 v v v都执行过操作,才能对 u u u执行操作。
问历史上 c n t cnt cnt的最大值最小可以是多少?
先不考虑 儿子都操作完父亲才能操作的限制,思考一个简单版问题:有 n n n个操作 ( a [ i ] , b [ i ] ) (a[i],b[i]) (a[i],b[i]),其含义为:先令 c n t + = a [ i ] cnt+=a[i] cnt+=a[i],再令 c n t + = b [ i ] cnt+=b[i] cnt+=b[i]。对这 n n n个操作排序,使历史上 c n t cnt cnt的最大值最小。( a [ i ] = w [ i ] , b [ i ] = − ∑ w [ v ] a[i]=w[i],b[i]=-\sum w[v] a[i]=w[i],b[i]=−∑w[v])
对于一段操作 i , i + 1 , . . . , j i,i+1,...,j i,i+1,...,j,设经过这段操作后 c n t = c n t + d e l t a cnt=cnt+delta cnt=cnt+delta,且执行这段操作途中历史上 c n t cnt cnt的最大值为