【题解】洛谷 P7737 [NOI2021] 庆典
注:本题为 NOI2021 D1T3。
题解
首先,本题只考虑可达关系,因此毫不犹豫地缩点+拓扑排序。
记所得图为
然后考虑题目条件:
- 将 C 国原有的有向道路视为无向道路后,所有城市可以互达。
- 若
x \Rightarrow z 且y \Rightarrow z ,则x \Rightarrow y 或y \Rightarrow x 。
可知:
证明
取
由条件 1 知,对于不同于
-
root \Rightarrow x -
x \Rightarrow root - 存在点
y 满足x \Rightarrow y 且root \Rightarrow y 。 - 存在点
y 满足y \Rightarrow x 且y \Rightarrow root 。
由于
对于第 3 种情况,由条件 2 知
因此一定有
(下文不再讨论原图,只讨论所得的外向树)
再考虑题目所求:额外加入
设
记
对于
考虑新加入一条边
- 若
a \in S ,则令S \leftarrow S \cup Sub_b 。 - 若
b \in T ,则令T \leftarrow T \cup R_a 。
注意:由于无法确定边的顺序,需要
那么如何记录
当然需要处理重复计算的问题,处理方式有三种:
- (适用于
S 在树剖线段树上打标记)处理到根路径的并集:记T 中点按树剖序从小到大排序依次为T_1,T_2,\cdots,T_{|T|} ,则答案为\sum_{i=1}^{|T|}R_{T_i}-\sum_{i=1}^{|T|-1}R_{\operatorname{LCA}(T_i,T_{i+1})} 。 - (适用于
T 在树剖线段树上打标记)处理子树的并集:记S 中点的子树的树剖序区间,按第一关键字为左端点升序,第二关键字为右端点降序排序,依次为[l_1,r_1],[l_2,r_2],\cdots,[l_{|S|},r_{|S|}] 。由于任意两个区间之间要么是包含关系,要么交集为空,因此答案为\sum_{i=1}^{|S|}[i=1 \lor l_i>r_{i-1}]Sub_i 。 - (两者都适用)每次查询后将所查询区间赋值为
0 。
三种方式时间复杂度均为
代码
P.S.
- 本题读入量是真的大,强烈建议加 fread/fwrite。
- 由于代码巨长,所以都丢在剪贴板里了。
- 为了让读者感受三种处理方式的效率差异,还附上了对应的提交记录。
- 请注意:在第三种处理方式中,12~14 及 20~25 这 9 个测试点用时均超过了 1s,即不保证第三种处理方式能在原题 1s 的时限下通过。
第一种:处理到根路径的并集
第二种:处理子树的并集
第三种:每次查询后将所查询区间赋值为