码迷,mamicode.com
首页 > 其他好文 > 详细

XSY2667

时间:2020-04-07 17:03:58      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:line   初始   log   block   证明   答案   span   class   题意   

题意

\(n\)个点的树,\(q\)次查询,每次查询给定\(k\),进行若干次操作,每次操作删除树上一条深度递减的点数\(\le k\)的链,求最少的操作次数。\(n\le 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

标签:line   初始   log   block   证明   答案   span   class   题意   

原文地址:https://www.cnblogs.com/Grice/p/12654272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!