题目大意
给出一个二叉树,每个点有点权 d i d_i di,按顺序切断它的 n − 1 n−1 n−1条边,代价是边所连的两个点的权值和,且断边之后两点会交换权值,你的目的是最小化权值和。
n ≤ 5 e 3 n\le5e3 n≤5e3
solution
实乃毒瘤 d p dp dp
很容易想到树形 d p dp dp,但是发现很难设置状态,题目中有一个重要条件,该树是棵二叉树,不妨先观察不同情况的不同短边顺序的点的移动情况
不难发现无论是什么情况,当且仅当一个点经过父边从子树外进来到位置 v v v,一个点 u u u经过父边从子树内出去,且它们的 l c a lca lca为 r r r,即当前讨论的点
所以可以设出状态 f u , v , r = l c a ( u , v ) f_{u,v},r=lca(u,v) fu,v,r=lca(u,v)表示 r r r子树内和 r r r到父亲的边被断, u u u点被移出去,一个点被移到 v v v的最小代价,由于还不知道移进来的是哪个点,所以这个最小代价并不算移进来的点的代价,移进来的点将会在之后的转移中被确定并且代价会被计算
设儿子个数为 d e g r deg_r degr,深度为 d e p u dep_u depu,儿子为 l s u , r s u ls_u,rs_u lsu,rsu
d e g r = 0 deg_r=0 degr=0
显然只有 f r , r = d r f_{r,r}=d_r fr,r=dr
d e g r = 1 deg_r=1 degr=1
观察前面的图不难发现要么 u = r u=r u=r,要么 v = r v=r v=r
u = r u=r u=r时
f u , v = min { f i , v + d u } , l c a ( i , v ) = l s u f_{u,v}=\min\{f_{i,v}+d_u\},lca(i,v)=ls_u fu,v=min{ fi,v+d