代码源

异或游戏

二分答案 \(S\),对于 \(a_i\oplus a_j\ge k\)\((i,j)\) 连边,相当于判定最小团覆盖是否不超过 \(k\),也就是是否存在反图的 \(k\) 染色。

由于最小染色等于最大团,从最大团的角度入手存在简单的 dp 做法,但难以解决构造。

先不着急求出 \(k\) 染色,而是先发掘一些性质。

现在是 \(a_i\oplus a_j<k\)\((i,j)\) 有边。

\(t\) 满足 \(2^t\le k<2^{t+1}\)。对 \(a_i\) 的低 \(t\) 位进行分组,组间互不影响,只需考虑组内。

再对第 \(t\) 位分成 01 两组,组内必须异色,组间异或和 \(\ge k\) 的可以共色,也就是求出最大匹配。

递归构造。得到的答案等价于从最大团的角度 dp 出的答案,非常神奇。

蚂蚁

同时收录于(非)人类题选做(2)。

考虑一个等价的随机过程,每次从摸牌堆中摸牌,如果摸到的牌已经有了 \(b_i\) 张就将其放入弃牌堆,不再重复摸牌。设摸牌堆中有 \(j\) 张牌,弃牌堆中有 \(k\) 张牌,摸牌一次的期望时间为 \(\frac{M-k}{M-j-k}\)

由于期望的线性性,我们求出每一个 \(\frac{M-k}{M-j-k}\) 发生的概率。对于每一个局面,只和 \(j\)\(k\) 有关,而与摸牌的顺序无关。所以对牌做背包,设 \(f_{i,j,k}\),讨论一下第 \(i\) 张牌放入了多少张转移,即可做到 \(O(n^3)\)。继续优化可以做到 \(O(n^2)\)

哎?对吗?

显然不像是会有多项式复杂度的做法,因此考虑暴搜。

考虑两条路径 \(S,T\) 如果 \(S\subseteq T\)\(S\) 完全劣于 \(T\)。因此考虑有用的路径集合,其中不存在包含关系。有个结论是这样的集合大小不超过 \(C(n,n/2)\)。由于是 DAG 上的路径,存在更精确的分析可以分析到 \(O(3^{n/3})\)。考虑 \(1\) 号点的出度若为 \(d\),则这 \(d\) 个点两两不可达,\(T(n)=T(n-d)d\)

现在考虑如何做背包。按照性价比排序后贪心取,直到背包重量 \(\le B\) 剩下的部分暴力背包。可以证明正确性。

posted @ 2025-07-03 16:41  Network_Error  阅读(33)  评论(0)    收藏  举报