ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF1039D You Are Given a Tree

2022-02-01 10:32:58  阅读:164  来源: 互联网

标签:Given le frac log Tree sqrt CF1039D mathcal 取值


更好的阅读体验

题意

给定一棵有 \(n\) 个节点的树. 对于满足 \(1\le k\le n\) 的每一个 \(k\),把树分成若干条包含 \(k\) 个顶点的链,其中每个点最多属于一条链,问最多能分得几条链.

\(n\le 10^5\)

题解

考虑 \(k\) 固定时怎么做

我们自下而上贪心,对于一个点,如果在它的子树内有一条经过该点且不经过以被使用点的链,那么我们就将这条链计入答案并将该点标记为使用过

简单证明一下:
对于点 \(u\) 满足在其子树内有一条经过该点且不经过以被使用点的链,如果这条链不计入答案,而是选取一条经过 \(u\) 的但不完全在 \(u\) 子树中的链,这样划分的链数不会增加,反而会占用这条链在点 \(u\) 子树外的点
因此,按照上述方法贪心是最优的

令 \(f_i\) 表示 \(k=i\) 时的答案,显然有 \(f_i\le\lfloor\frac{n}{i}\rfloor\)

类似除法分块,\(f_i\) 一共只有 \(\mathcal{O}(\sqrt{n})\) 种取值
证明如下:

  • \(i\le \sqrt{n}\)
    显然只有不超过 \(\sqrt{n}\) 种取值
  • \(i>\sqrt{n}\)
    \(f_i<\lfloor\frac{n}{sqrt{n}}\rfloor=\sqrt{n}\)
    显然也只有不超过 \(\sqrt{n}\) 种取值

因此我们对于每一种取值二分右端点,时间复杂度为 \(\mathcal{O}(n\sqrt{n}\log n)\),不足以通过此题

观察到前几种取值比较密集,对每种取值二分是很浪费的,考虑对前 \(T\) 项直接暴力,只对后面的 \(\mathcal{O}(\frac{n}{T})\) 种取值二分

时间复杂度为 \(\mathcal{O}(nT+\frac{n}{T}\log n)\),\(T\) 取 \(\sqrt{n\log n}\) 时有最优复杂度 \(\mathcal{O}(n\sqrt{n\log n})\)

细节

实现的时候注意常数,特别是不要每次贪心都dfs一遍,推荐直接在dfs序上做

代码 codeforces submission 144337474

标签:Given,le,frac,log,Tree,sqrt,CF1039D,mathcal,取值
来源: https://www.cnblogs.com/gzezfisher/p/cf1039d.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有