异或

这道题目的思路比较好

由于\(1\)\(n\)的路径很多,我们猜想,任意选一条路径可以通过某种异或运算来得到最优解

证明:假设我们选出的路径不是最优路径,那么对于另一条最优路径,一定可以通过我们选出的路径异或上若干个简单环来达到。举个例子说明

假设我们选出的是直线段\(AE\),最优的路线是\(A\)先走直线到\(D\),然后通过两个圆弧\(DCB\)到达\(B\),最后再走直线到\(E\),那么最优路线的值就等于我们选出的路径异或上图中的两个简单环

上述结论启发我们,找到图中所有的简单环,然后用我们选出来的路径加上若干个简单环能够到达的最大值就是答案

但是我们任选简单环,是否一定能够找到一条路径对应呢?答案是肯定的,对于任意一个简单环,我们先从\(1\)走到环上的某一点\(x\),然后走一遍这个环到\(x\),再从\(x\)又回到\(1\)号点就相当于得到了这个环的异或值

于是我们找出所有简单环考虑线性基

当我们化出行简化梯形矩阵的时候,记住每个非零行是若干个\(a\)的异或,也就是说我们任取非零行来异或一定可以在原来的\(a\)中找到一些\(a\)来异或起来对应;而这些非零行又是极大线性无关组,显然可以覆盖问题空间

注意行简化梯形矩阵有“异或运算”这道题目所说的性质,所以我们依次从高位到低位贪心即可

找出所有简单环的代码要记住,另外有个结论:简单环的个数与边数同级

posted @ 2024-05-02 16:05  最爱丁珰  阅读(2)  评论(0编辑  收藏  举报