无名题解

\(\texttt{Description}\)

给定 \(n\) 个点的树,给定 \(m\) 条路径 \((x_i,y_i)\)\(q\) 次询问,每次询问给定 \(l_i,r_i\),求路径 \((x_{l_i},y_{l_i}),(x_{l_i+1},y_{l_i+1}),\cdots,(x_{r_i},y_{r_i})\) 并集的连通块数。

定义路径的并:\(\cup(x_i,y_i)=(V=\cup_{i}\cup_{node\in (x_i,y_i)}node,E=\cup_i\cup_{edge\in (x_i,y_i)}edge)\)

\(\texttt{Solution}\)

由于路径的并是森林,考虑森林的连通块数等于总点数减去总边数,我们对于每个询问分别计算路径并的点集和边集大小。

考虑点基,边基类似。在线难以操作,考虑离线。

由于删除路径难以操作,考虑右指针递增,左指针用一维数据结构维护。

考虑右指针 \(r\)\(r + 1\),同时维护 \(\{(x_i,y_i)|k\le i\le r\}|k=1,2,\cdots,r\)\(r\) 个集合加入 \((x_{r+1},y_{r+1})\) 的并。由于集合存在单调性,对于每个点 \(s\),维护 \(t_s=\max\{i|s\in(x_i,y_i)\}\),可知 \(k\le t_s\) 的集合包含 \(s\)

维护 \(t_s\) 可以使用珂朵莉树,区间 \([l_i,r_i]\) 的答案是 \(\sum_s[l_i\le t_s]\)

由于路径是在树上,用树剖将其映射到序列上。那就是对 \(n\log n\) 个区间进行操作,时间复杂度 \(O(m\log^2n)\)

猜你喜欢

转载自www.cnblogs.com/Ryedii-blog/p/12359684.html