首页 > 其他分享 >【题解】AGC007E | 二分答案 复杂度分析

【题解】AGC007E | 二分答案 复杂度分析

时间:2024-03-28 14:35:37浏览次数:21  
标签:子树 AGC007E 题解 复杂度 最大值 max 我们 out

首先考虑题目要求每条边被经过两次,这说明了我们进入一个子树后一定会处理完子树内所有的叶子后离开该子树,否则子树上端那条边会进出至少两次,即经过至少四次。所以这说明了子树之间的独立性:某个子树在答案中一定是一个连续的区间,这引导我们从有根树信息自下向上拼接的角度考虑。

我们就可以将一个有根树抽象成三部分:从根进入 \(in\),内部最大值 \(max\),离开回到根 \(out\)。内部的部分不会再发生改变,我们只关心它的最大值 \(max\),然后可以通过拼接两个子树离开-进入的信息来得到父亲的信息:\((in_a,out_b,\max(max_a,max_b,out_a+in_b))\)。

因为这个过程是可以倒过来走的,于是我们就只需要设置 \(f_{a,b}\) 表示进入左子树的 \(a\),从右子树的 \(b\) 离开的最大值的最小值即可。

于是我们通过记录所有每个点所有 \((in,out)\) 对应的 \(max\) 就有了一个 \(O(\text{poly}(n))\) 的做法(取决于你咋搞,反正难以低于 \(O(n^2)\))。

考虑优化:若要记录内部最大值是一件很浪费的事情,我们需要最小化最大的一次,又因为我们的过程涉及到了边的加和,故肯定得考虑二分答案转化为可行性问题,问题变为需要检测答案 \(Dis\) 是否可行。

然后对于刚刚那个问题,我们便不再关心每个 \((in,out)\) 了,我们只关心每个 \(in\) 可以对应的 \(out\),且如果存在 \(in_1 \geq in_1,out_1 \geq out_2\),那么 \((in_1,out_1)\) 一定没用,于是我们可以通过维护一组单增的 \(in\) 及其对应的一组单减的 \(out\) 值来描述这个子树的信息。

考虑信息的拼接,即需要合并两组 \(A(in,out),B(in,out)\),合并的条件为若有 \(Aout_i + Bin_j \leq Dis\) 则有 \((Ain_i,Bout_j)\),因为 \(A\) 和 \(B\) 都满足随着 \(in\) 增,\(out\) 减,所以可以按顺序枚举 \(Aout_i\) 双指针维护可行的 \(Bin_j\) 即可。因为过程是可以倒过来走的,我们再把所有 \((out,in)\) 也加入,最终再排序/归并排序,去除掉没用的就可以得到父亲树内的 \((in,out)\) 序列。

直接这样做看上去复杂度是 \(O(\sum siz_i)=O(n^2)\) 的,但是考虑因为我们记录的 \((in,out)\) 对中 \((in,out)\) 一者一定是左子树或右子树中的一个点深度,又因为我们保留的 \(in\) 单增,\(out\) 单减,所有这样的 \((in,out)\) 最多只有 \(2\times light_i\) 对,其中 \(light_i\) 表示 \(i\) 的轻子树大小,所以复杂度是 \(O(\sum light_i)=O(n\log n)\),加上外层二分,若使用归并时间复杂度 \(O(n\log ^2n)\),直接 sort 三只 \(\log\) 也没啥问题。

这里是代码,实现使用了直接上传 vector 的做法,由于累计向父亲上传的大小之和仍然不大于轻子树大小,不会影响复杂度。


感觉这也不难啊为啥评了 *3900 .jpg

标签:子树,AGC007E,题解,复杂度,最大值,max,我们,out
From: https://www.cnblogs.com/Dreamerkk/p/18101592

相关文章

  • SP2426 PLD - Palindromes 题解
    题目传送门题目大意给定一个字符串,请你求出这个字符串中所有长度为kkk的回文串的个数。解题思路我们只需要枚举每个字串的起始位置......
  • [USACO24FEB] Bessla Motors G 题解
    题目大意对于每个充电站找它所能去到的非充电站的点TTT($C<T$同时两点的距离在RR......
  • 2006 年考研英语真题 - 翻译题解析
    2006 年考研英语真题 - 翻译题解析IsittruethattheAmericanintellectualisrejectedandconsideredofnoaccountinhissociety?[1] 翻译:难道美国的知识分子被嫌弃,在社会中不受重视吗?1.it 是形式主语,代指后面的 that 从句。2.Americanintellectual 美......
  • 2007 年考研英语真题 - 翻译题解析
    2007 年考研英语真题 - 翻译题解析ThestudyoflawhasbeenrecognizedforcenturiesasabasicintellectualdisciplineinEuropeanuniversities.[1]                  翻译:几个世纪以来,欧洲的各所大学一直认为法学学习是一门基础知识学科。1.......
  • P5470 [NOI2019]序列 题解
    P5470:NOI2019序列题意:给定两个长度\(n\)的序列\(a,b\)。要求各选出\(k\)个数,使得这\(2k\)个数之和最大,且两个序列选出的数至少有\(l\)个位置相同。\(n\le2\times10^5\)。command_block的题解但是这个貌似有一些小问题,后文有写。算法:模拟费用流。【费用流模......
  • 2003 年考研英语真题 - 翻译题解析
    2003 年考研英语真题 - 翻译题解析Humanbeingsinalltimesandplacesthinkabouttheirworldandwonderattheirplaceinit.[1]             翻译:各时期各地区的人们都思考各自的世界并想知道自己在其中的位置。1.Humanbeing 人;人类。2.inal......
  • 2002 年考研英语真题 - 翻译题解析
    2002年考研英语真题- 翻译题解析Almostallourmajorproblemsinvolvehumanbehavior,andtheycannotbesolvedbyphysicalandbiologicaltechnologyalone.[1]            翻译:几乎我们所有主要问题都涉及到人类行为,而这些问题仅靠物理和生物技术手......
  • 「CF1677D」Tokitsukaze and Permutations的题解
    「CF1677D」TokitsukazeandPermutations首先,若\(v\)的后\(k\)个数中有一个\(>0\),或有\(v_i>i-1(i\in[1,n])\),则无解。我们发现,每次对\(p\)进行了一次操作后,\(v\)也一定会对应的进行一次变化,所以统计\(p\)的个数就相当于统计\(v\)的个数。我们对于每一次冒泡排序......
  • [THUWC2018]城市规划的题解
    [THUWC2018]城市规划连通块问题,我们考虑树形DP。设\(f_{u,j}\)表示在以\(u\)为根的子树内,选的颜色集合为\(a_{u},j\)(两个颜色都必须选)且必须选点\(u\)的情况下的连通块个数。特殊的,\(f_{u,a_{u}}\)表示颜色只有\(a_{u}\)的情况数。对于\(v\inson_u\),有:若\(a_{u......
  • 【题解】P10235 [yLCPC2024] C. 舞萌基本练习
    P10235舞萌基本练习题解思路看到最大值最小首先考虑二分答案。由于答案满足单调性,可以二分不优美度的最大值,也就是逆序对数的最大值。我们在每次增加一个元素的时候都要求解当前区间的逆序对数,所以不能用归并排序求逆序对数,考虑树状数组解法。如果不会树状数组求逆序对,请出......