5.29 SD省队培训D1

5.29 SD省队培训D1

自闭的一天

T1 梦批糼

先咕一咕(两天之内一定补上)

T2 等你哈苏德

继续咕(一星期之内补上)

T3喜欢最最痛

四十分做法:

首先,我们发现同一个点加两条额外边是一件非常蠢的事,然后同时,加额外边也同时意味着讲这两个点在树上的路径长度用当前权值代替.那么题目就转化成了对与每个(kin[0,m])求出树上的边不相交(因为上面说了,相交是一件很蠢的事)的(k)条路径的最大和.
我们考虑(dp),因为点不相交就贪心,有点类似noip2018D1T3
(dp_{i,j0/1})表示在以(i)为跟的子树中,选了(k)条路径,能((1))((0))向上延伸的最大路径之和.
所谓向上延伸,画张图理解一下
Vu40AI.png

红色为我们选择的边左图是不可延伸,而右图可以延伸。
那么知道了这个之后我们想一想该怎么转移

(dp_{x,u + v,0} = max(dp_{x,u,0}+dp_{y,v,0},dp_{x,u,1} + dp_{y,v + 1,1} + e[i ].data)yin son_x)

首先第一个是当(x)(y)都没有链头的时候(我们称能否向上延伸为链头),肯定是可以结合的
第二个是两个都有链头,但是两条合并时,总的链数就会减一,而这个减一只能在儿子那上面去减.因为如果减到父亲上会影响之后的DP转移

(dp_{x,u + v,1} = max(dp_{x,u,0}+dp_{y,v,1} + e[i].data,dp_{x,u,1} + dp_{y,v,0}))

转移1时也分两种情况,首先是看看链头在那上面即可

原文地址:https://www.cnblogs.com/wyxdrqc/p/10946480.html