题解:P15369 『ICerOI Round 1』并非图论
题意
有 \(n\) 个点。对于一个边集 \(E\),定义
\(q\) 次询问 \(l,r\),求点集 \(V=\{l,\cdots,r\}\) 时所有生成树中 \(f(E)\) 的最小值,在此基础上最小化 \(deg_l\)。\(n\leq 10^{18}\),\(q\leq 2\times 10^5\)。
题解
套路地把度数拆到边上,则一条边的边权为 \(u+v-(u\operatorname{and}v)=u\operatorname{or}v\),我们要求最小生成树。
不难想到这样的贪心:从小到大考虑 \(i=l+1,\cdots,r\),考虑给 \(i\) 指认一个父亲 \(j\) 使得 \(l\leq j<i\) 且 \(j\operatorname{or}i\) 最小。显然 \(j\operatorname{or}i\geq i\),我们当然希望能够取等,不难发现若 \(i-\operatorname{lowbit}(i)>l\),取 \(j=i-\operatorname{lowbit}(i)\) 即可使边权取到 \(i\)。否则可以证明取 \(j=l\) 是最优的,此时边权为 \(l\operatorname{or}i\),且 \(deg_l\) 恰好就是取到这种情况的 \(i\) 的数量。这样我们就得到了 \(\mathcal{O}(q(r-l+1))\) 的做法。
进一步优化,考察取到第二种情况的条件:\(l<i\leq l+\operatorname{lowbit}(i)\)。不妨枚举 \(\operatorname{lowbit}(i)=2^k\),显然 \(2^k\mid i\),于是满足条件的 \(i\) 至多只有 \(1\) 个:取 \(x\) 为最小的 \(>l\) 的 \(2^k\) 的倍数,若 \(\operatorname{lowbit}(x)=2^k\land x\leq r\) 则 \(x\) 为满足条件的 \(i\)。我们先令 \(ans\gets \sum_{i=l+1}^r i\),然后找出 \(\mathcal{O}(\log{n})\) 个满足条件的 \(i\) 修正贡献即可。时间复杂度为 \(\mathcal{O}(q\log{n})\),可以通过。
叽里咕噜说什么呢,怎么证明正确性来着?
我们先证明当 \(i-\operatorname{lowbit}(i)\leq l\) 时,取 \(j=l\) 是最优的。
证明
考察 \(i,l\) 二进制表示下 LCP 的后一位,则 \(i\) 在该位上为 \(1\),而 \(l\) 在该位上为 \(0\)。而由于 \(i-\operatorname{lowbit}(i)\leq l\),\(\operatorname{lowbit}(i)\) 必然恰好取到这一位上。于是 \(j \operatorname{or} i\) 在该位或更高位处的取值是固定的,而在更低位处,\(i\) 都是 \(0\),取的就是 \(j\) 的低位处的值,于是显然取 \(j=l\) 是最优的。\(\Box\)
接下来证明我们的贪心策略是正确的。
证明
考虑用 Prim 刻画最小生成树,则我们的贪心策略相当于固定了 Prim 选择节点的顺序为 \(l,l+1,\cdots,r\),这等价于证明:对于每一个 \(l<i\leq r\),\(\{l,\cdots,i-1\}\) 和 \(\{i,\cdots,r\}\) 之间的最小边权必然有一端为 \(i\)。
若 \(i-\operatorname{lowbit}(i)>l\),则正确性显然。下面证明 \(i-\operatorname{lowbit}(i)\leq l\) 的情况。
设 \(\operatorname{lowbit}(i)=2^k\),\(\operatorname{low}(x)=x\bmod 2^k\),则 \(l\operatorname{or} i=i+\operatorname{low}(l)\)。考虑一个 \(i<j\leq r\),设 \(j\) 与 \(i\) 在二进制表示下的 LCP 的后一位为 \(2^t\),分类讨论:
- \(t>k\):此时我们有
- \(t<k\):此时只用考虑 \(<k\) 位处的取值,我们有
结论得证。\(\Box\)

浙公网安备 33010602011771号