AT_abc362_f [ABC362F] Perfect Matching on a Tree

双倍经验

先随便设一个根。考虑树上一条边的贡献,即他被包含在多少个点对的匹配中。设较深的节点的子树大小为 \(sz\),那么贡献即为 \(\min(sz,n-sz)\)

如果可以构造使得每条边都达到这个上界,那么一定最优。

还是考虑随便钦定一个根,划分成若干颗子树,一个匹配的两个端点要么在一个子树内,要么跨越两个子树。不难发现在一个子树内不优,因为如果可以往子树外匹配可以增加 \(\operatorname{lca}(x,y)\) 到根的价值。于是最优策略一定是一个点贪心的向往所在子树外面匹配。

发现如果对于一个根可以构造,那么每条边的贡献都能被卡满,即此时一定更优,考虑什么时候不能构造,即一个子树的大小大于剩下的部分。如何避免呢?找重心即可。剩下的子树之间的匹配时普及组知识。

注意 \(n\) 为偶数的时候重心也要参与到匹配里。

posted @ 2024-07-24 21:28  xlpg0713  阅读(11)  评论(0)    收藏  举报