XSY2667

Posted grice

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XSY2667相关的知识,希望对你有一定的参考价值。

题意

(n)个点的树,(q)次查询,每次查询给定(k),进行若干次操作,每次操作删除树上一条深度递减的点数(le k)的链,求最少的操作次数。(nle 10^5)

做法

(num)为叶子个数,一个询问的答案是(O(num+frac{n-num}{k}))

证明:
贪心,每次选择一个最深的未被覆盖的点,记为关键点,将该点往上覆盖(k)
点全部被覆盖后,将关键点与父亲的边去掉,根、叶子连通块个数为(O(num))
其他的连通块最深的点到关键点距离为(k-1),故点数(>k),所以连通块个数为(O(frac{n-num}{k}))

预处理出所有的答案(ans_k),对于(ans_k),初始化答案为叶子个数
将离最近的叶子(=k)的节点存到堆里,然后贪心选出最深的节点,用线段树判断该点是否为关键点(有可能先前被覆盖了),如果是关键点往上爬再放进堆里

(O(nlog^2n))

以上是关于XSY2667的主要内容,如果未能解决你的问题,请参考以下文章

[XSY 1557] task

XSY2271青蛙(栈)

[XSY 1947] Goodness

XSY2759

[xsy1140]求值

XSY原创题 膜法