首页 > 其他分享 >CF526G Spiders Evil Plan 题解

CF526G Spiders Evil Plan 题解

时间:2024-07-28 23:28:31浏览次数:16  
标签:长链 题解 权值 路径 2y 叶子 Spiders CF526G 虚树

Description

给定一棵 \(n\) 个节点的无根树,每条边有边权。

有 \(q\) 次询问,每次询问给出 \(x,y\),你需要选择 \(y\) 条树上的路径,使这些路径形成一个包含 \(x\) 的连通块,且连通块中包含的边权和最大。

\(n, q \le 10^5\),强制在线。

Solution

考虑只有一组询问怎么快速求答案。

容易发现树上路径的两端点一定是叶子,并且如果给定了这些叶子那么一定存在一组方案使得这些路径覆盖了这些叶子构成的虚树。

对于询问 \(x,y\),考虑把 \(x\) 提到根,需要找到一些叶子使得这些叶子的虚树包含 \(x\) 并且虚树权值和最大。

如果只要求权值和最大就只需要找到权值最大的 \(2y\) 条长链即可,这就是贪心选,但是此时选择的虚树可能不包含 \(x\) 而导致这种以 \(x\) 为根贪心取长链算出来的答案也会算上一些虚树没有的边。

由于这是暴力就不考虑怎么调整了。

注意到选择叶子的最优解一定满足至少选了树的直径的两端点之一,所以考虑让直径的两端点作为根跑上面那个贪心做法,这样就不用换根了。

具体的,假设直径的一段点为 \(p\),就以 \(p\) 为根选择最长的 \(2y-1\) 条长链加入答案。

对于一组询问 \((x,y)\),可能存在选的方案虚树不包含 \(x\),需要调整。容易发现只有两种调整方案:

  1. 找到 \(x\) 祖先里第一个被选的点然后把这个点到叶子的路径替换为这个点走到 \(x\) 那边的路径。
  2. 让 \(x\) 所在的长链替换原来第 \(2y-1\) 长的长链。

至于为什么是这两种就考虑 \(x\) 的长链替换哪个原长链即可。

时间复杂度:\(O\left((n+q)\log n\right)\)。

Code


标签:长链,题解,权值,路径,2y,叶子,Spiders,CF526G,虚树
From: https://www.cnblogs.com/Scarab/p/18329159

相关文章

  • 【科大讯飞笔试题汇总】2024-07-27-科大讯飞秋招提前批(研发岗)-三语言题解(Cpp/Java/
    ......
  • ABC364 DEF 题解
    ABC364DEF题解D-K-thNearest题目链接赛时想了一个(也许确实是对的)做法,但是代码太难写,一直没写出来……看了官方题解才发现正解其实也很简单……本题最关键的一点是要转换思路:与其考虑“离某个点第\(k\)近的点在哪”,不如考虑“离某个点距离不超过\(x\)的点有多少个”。......
  • 会员购项目面试题解析:高效数据抓取与异常处理
    会员购项目亮点日志记录信息协程异步抓取数据,大大提高抓取速度捕获异常,并添加重试机制源码importloggingimporttimeimportrequestsimportasyncioimportaiohttpfromaiohttpimportContentTypeErrorimportcsv#配置日志logging.basicConfig(level=logging......
  • C++题解(17) 狐猬编程: 640.线段覆盖
    题目描述在一条数轴上,有N条线段,第i条线段的左端点是s[i],右端点是e[i]。如果线段有重叠(即使是端点重叠也算是重叠),则输出“impossible”,如果没有重叠则输出“possible”。输入格式输入文件名:640.in多组测试数据。第一行,一个整数G,表示有G组测试数据。1<=G<=10。每组......
  • [题解]ABC364 A~F
    A-GluttonTakahashi给定\(n\)道菜,每道菜要么是甜的(用sweet表示),要么是咸的(用salty表示)。必须按顺序吃,如果连续吃到\(2\)个甜的菜,就会浑身难受吃不下去了。请问是否能吃完这些菜。按题意模拟即可,只要前\(n-1\)个元素中有连续的sweet就输出No。点击查看代码#include<bits/s......
  • CF292D 题解
    \(O(mk\alpha(n))\)暴力,考虑对于每个询问\(l,r\),枚举\(1\siml-1,r+1\simm\),并查集连边即可。1154ms。\(O(n(m+k\alpha(n)))\)我们发现枚举\(i\in[1,l),j\in(r,m]\)太慢了。考虑先预处理出并查集从\(1\)连边到编号为\(id\)的边的状态\(pre_{id}\),倒过来再处理出......
  • CF626G Raffles 题解
    Description有\(n\)个奖池,第\(i\)个奖池的奖金是\(p_i\),已经有\(l_i\)张彩票押在上面。现在你有\(t\)张彩票,你需要将你的彩票分配到这些奖池中,并且保证你在每个奖池中押的彩票数不能超过该奖池原有的彩票数。若你在第\(i\)个奖池中押了\(t_i\)张彩票,则你中奖的概......
  • AtCoder Beginner Contest 363 题解 A-D(待补充)
    A-PilingUp1.1思路其实就是向上取百位的整,需要增加多少,123则为200-123=177;1.2代码voidsolve(){intn;cin>>n;intt=n/100;cout<<(t+1)*100-n;}B-JapaneseCursedDoll 2.1思路就是判断最少需要多少天,会有大于等于P个人......
  • Codeforces Round 962 (Div. 3) 题解 A-F
    A.LegsProblem-A-Codeforces1.1翻译农夫约翰的农场又迎来了美好的一天。农夫约翰来到农场后,数了数n条腿。众所周知,农场里只住着鸡和牛,一只鸡有2条腿,而一头牛有4条腿。假设约翰农场主数清了所有动物的腿,那么他的农场里最少有多少动物?1.2思路求最少有几只动物......
  • 题解 - 矩阵
    题目描述小明和小花知道学信息学竞赛的学生特别擅长做一些和矩阵相关的问题。例如,同学经常做的一个题目,给你一个N×M的矩阵,矩阵里面每个格子上都有一个数,要从左上角(1,1),走到右下角(N,M),每一步只能往下或者往右走,让你求经过的路径上数的总和最小。小明和小花发现这个......