1. P9678 [ICPC2022 Jinan R] Tree Distance

一个套路:支配点对。在本题中的意思是,若 \(x_1\leq x_2\leq y_2\leq y_1\)\(dis(x_2,y_2)\leq dis(x_1,y_1)\),那么 \((x_2,y_2)\) 就支配了 \((x_1,y_1)\),后者对答案一定没有贡献。

考虑点分治。设当前分治中心为 \(t\),分治子树内所有点到中心的距离为 \(d_x\),考虑某个点 \(i\),则只有满足 \(d_x\leq d_i\)\(x\) 构成的集合 \(S\)\(i\) 的前驱后继才可能是支配点对。

于是找出 \(d_x\) 后,按 \(x\) 升序/降序扫描,单调栈一下就行。然后对这 \(n\log n\) 个点对二维数点。

2. CF1844G Tree Weights

猜想 I. 将所有 \(dis(i,i+1)=L_i\) 的条件转化为 \(n-1\) 个若干边权相加得到 \(L_i\) 的方程,发现未知数和方程个数都为 \(n-1\),猜测系数矩阵满秩。

思路 I. 若原图为链,以链的某一端为开头,设一个边权的前缀和 \(S_i(1\leq i \leq n),S_1=0\),每个方程均表示 \(S_r-S_l=L\),可以从 \(S_1=0\) 开始 dfs,求出所有 \(S_i\),再推出边权。

注意到对于 \(i\in[2,n-1]\) 的度数均为 \(2\),而 \(i=1,n\) 度数为 \(1\),所以是很容易能搜出来的。

这个东西可以扩展上树。以某个点 \(r\) 为根,令 \(S_i\) 表示 \(r\)\(i\) 的边权和,则 \(d_i+d_{i+1}-2d_{lca(i,i+1)}=L_i\)。但是好像就解不了了。

如果能使得 \(lca(i,i+1)\leq i\)\(=r\),那么问题就完美解决了(逐个递推出 \(d_i\))。这个真的可以做到吗?

不能。

你的数学水平还是太低了。 ——姬野永远

\(d_i+d_{i+1}-2d_{lca(i,i+1)}=L_i\) 这个方程两边模 \(P=2\)

立得 $d_i+d_{i+1}\equiv L_i\pmod 2 $,又 \(d_1\equiv 0\) 所以可以解出所有 \(d_i\pmod 2\)

然后得到所有边权 \(\pmod 2\),在所有 \(d_i\) 上消去这些影响。继续往下考虑 \(\bmod 2^k\) 即可。

一旦出现 \(d_i<0\) 或最终某条边 \(e=0\),则无符合要求的解;否则一定有解。

这个角度也可以说明系数矩阵确实一定是满秩的。即使数域不再是 \(\mathbb{Z}\),无法如此递推,但并不影响矩阵的秩。

3. CF1889D Game of Stacks