【BZOJ2067】[Poi2004]SZN

时间:2022-09-21 08:25:01

题解:

比上一题水多了

首先树上贪心,肯定要考虑儿子

然后我们会发现这个东西就是要先把儿子连起来

然后如果儿子个数为奇数我们可以把这一条和它连向父亲的并在一起

由于根没有父亲所以要单独考虑

答案就是sigma{i,(son[i]-1)/2}+(son[root]+1)/2

然后也是比较简单的

最大值最小,二分答案显然

考虑一个节点x,

如果为偶数只要最大最小配对满足要求就可以

如果为奇数在儿子满足条件的情况连上去的长度越短越好

我们可以这么操作

从大到小考虑,我们查找到最大的能匹配的最大的那个

然后从最大的那个往匹配位置考虑,如果当前+匹配位置左边那个符合 就两个都向中间移动

如果不符合,就取初始匹配点右边的一个,该指针右移一格,当前位置右移一格

然后我们把剩下的那个往上延伸就可以了,变成子问题

代码: