2022-12-9 #7 明白你那份跳动的爱 别再装作着无所谓的姿态
——校长《末日DISCO》
今天,尽量少摆一点。
35 CF1761G Centroid Guess
假设我们确定了重心一条链 \((x,y)\) 上,我们可以通过询问每个点与 \(x,y\) 分别的距离来确定这条链上每棵子树的大小,那么带权重心即为所求。
也就是,我们需要用 \(5\times 10^4\) 次询问,确定重心在哪条链上。
先讲 dragonslayerintraining 的做法,因为更加自然。
考虑上述做法在重心不在链上导致的后果,会有一棵子树大小大于等于 \(\lfloor\frac{n}{2}\rfloor+1\),我们随机取这棵子树中的一个点将链的一端调整为它,那么链的一端会有 \(\frac12\) 的概率在重心子树里,调整若干遍即可保证正确性。
为了判定而扫整棵树代价太高了,根据这个判定条件,我们可以随机 \(B\) 个位置,只考虑这些位置得到的子树大小,这样就解决了本题。
但还有一个问题,如果重心在链上,被调整掉了怎么办?假设此时大于 \(\lfloor\frac n2\rfloor\) 的子树为 \(x\),链的两端为 \(s,t\),我们只需在调整链时保留 \(sum(s,pre(x)),sum(suc(x),t)\) 中点数较多的就好了,这样只需保证重心所在子树随机到的点数超过 \(\lfloor\frac B4\rfloor\) 就好了。
正确率是很好分析的。
官方做法是随机 \(B\) 个位置,询问这些位置两两之间的距离,然后建立一棵虚树。我们只要先建出不包括 lca 的虚树,然后再把 lca 加入(不需要知道编号)就好了。
将随机到的位置的点权视作 \(1\),加入的 lca 点权视作 \(0\),将带权重心作为根,然后选择两棵最大的子树向下 dfs,每次选择最大的子树走。我们断言,重心有极大概率在这条链上、
若不在链上,那么重心所在子树一定只包括不超过 \(\frac{1}{3}\) 的采样点,正确率极高。
36 P6106 [Ynoi2010] Self Adjusting Top Tree / PKUSC2022 D1T2/
不是很难的题。
差分成 2-side 矩形,每条线段有三种状态:包含,相离,相交。
第一种是二维数点,第二种不用管,第三种不妨考虑与右边界相交的情况:
由于线段不相交,所以线段之间顺序固定。每个线段插入后贡献是一个历史版本和,直接平衡树维护即可。
PKUSC2022 D2T2:基本一致,把上面的过程改成“减去多余的部分”就好了。
???还在摆???
「好想继续」当你叹息回忆
「好想回去」当你哭着后悔曾经
「如果可以」你说如果可以
「让我回去」你说那天不该放弃