A. 羊圈
有一个图, n 个点, 初始无边, 给定 q 次操作, 每次要不加入一条边, 要不给定 k 进行询问: 初始所有点为白色, 把所有相邻白点个数 ≤k 的点染黑, 求最后黑点个数 (询问互相独立). n,q≤105.
注意到有效的 k≤O(q), 对每个 k 分别处理, 从后往前考虑, 对每个点计算出会在那个点删除. 具体来说, 用 queue 维护, 不断删除度数 ≤k 的节点, 每个点被删除时考虑所有未被删除的邻居. 时间复杂度 O(nn).
B. 酱油面
给定一棵树, 每个节点有一个初始为 1 的指针 cu, 从 1 开始遍历, 当前到达 u, 那么 cu←(cu+degu)+1, u←Gu(cu), 其中 Gu(i) 表示 u 的第 i 个邻居 (父亲为其中任意一个). 若干次强制在线的询问, 问遍历了 k 个节点时所在节点. n≤5×105,k≤1015.
首先通过 rotate Gu(i) 让 cu 初始为 0. 注意到从 u 到 fau, 那么有 cu=j, Gu(j)=fau, 且每次遍历经过的节点时原树的一部分的欧拉徐. 当从 1 开始遍历若干遍后, 会有 ∀u=1:Gu(cu)=fau 时, 之后 1 开始遍历会产生该树的一个欧拉序. 考虑在这之前, 对于每个节点 u , 处理出会在 tiu 次遍历时第一次经过 u, 有 $v=G_u(i)\neq fa(u), ti_v=ti_u+[i\gt j], G_u(j)=fa_u$. 那么在 tiu 轮及以后, u 和 fau 会加入欧拉序. 考虑用主席树来维护每一轮.
时间复杂度 O(nlogn).
C. 湖心石
给定序列 a, 定义二元运算 z=s(x,y), 有 zi=si(xi,yi), 其中 si 与, 或, 异或三者之一, xi 表示 x 的第 i 位. q 次询问, 给定 si 和 x, 求有序对 (i,j) 的个数, 满足 s(ai,aj)=x. n,q≤105,ai,x≤216.