2023.7.5 CF practise
CF1174F Ehab and the Big Finale
树链剖分。
先 s 1
求出 \(x\) 所在子树 \(y\)。
若 \(y\) 为 \(1\) 轻儿子,递归求解 \(y\)。
若 \(y\) 为重儿子,那么找到重链上与 \(x\) 深度相同的节点 \(c\).
调用 d c
,此时 \(c\) 向上跳 \(x\) 与 \(c\) 距离的一半便是 \(lca\),递归求解。
相当于走了 \(x\) 向上的所有轻,重链。
由于轻链,重链数量都是 \(\log n\) 级别,所以询问次数不会超过 \(36=2O(\log n)\).
CF1322B Present
先拆位。
若第 \(k\) 位为 1,那么对于所有 \(a_i\),能做贡献的只有 \(a_i\) 后 \(k\) 位,设其为 \(b_i\).
若 \(b_i+b_j\) 第 \(k\) 位为 \(1\),
那么 \(b_i+b_j\in [2^k,2^{k+1}-1]\),或 \(b_i+b_j \in [3\cdot 2^k,2^{k+2}-2]\)
把 \(b\) 排序,直接用双指针或其他数据结构处理即可。
CF1060E Sergey and Subway
显然,新图中两点的路径优先走跨越两条边的边。
\(dis(i,j)\) 表示原图中的 \(i,j\) 距离。
新图距离为 $\left \lceil \dfrac{dis(i,j)}{2} \right \rceil $.
我们发现,若原图距离为奇数,就是 \(\dfrac{dis(i,j)+1}{2}\).
那么我们先求出原图所有点对距离和,加上奇数距离的点对数,在除以 \(2\) 即为答案。
我们考虑每一条边,有多少点对经过他,就做了这么多的贡献,这样可以求出原图所有点对距离和。
奇数距离的点对数为奇数深度的点数乘上偶数深度的点数。
因为 \(dis(i,j)=dis(1,i)+dis(1,j)-2dis(1,lca)\),而 \(2dis(1,lca)\) 不影响奇偶性。
CF1824B2 LuoTianyi and the Floating Islands
如果 \(k\) 是奇数,显然期望为 1。
如果 \(k\) 是偶数,发现,若存在两个点 \(i,j\),\(i\) 一侧和 \(j\) 一侧分别有 \(k/2\) 个节点有人,
那么 \(i,j\) 为端点的链上所有点都可以作为 “好的结点”,即有 \(dis(i,j)+1\) 做了贡献。
考虑对每一条边计算贡献,若这条边为 \((fa_v,v)\),那么贡献是 \(C_{size_v}^{k/2} \times C_{n-size_v}^{k/2}\),设其总和为 \(s\)
但是我们以边算贡献,是少了 1 的,所以最后的答案是 \(\dfrac{s}{C_n^k}+1\).