把允许重复边的路径 XOR 全集分解成“树上固定势能差 + 环空间任意线性组合”,并按二进制位统计所有不同可达值,而不是枚举路径。
前置:XOR 线性基、DFS 生成树、线性空间计数。
允许重复点边后,路径数量无限,但 XOR 只记录每条边经过次数的奇偶。无限走法因此不是更难的搜索,而是在暗示有限维环空间。
无向图 $n\le10^5,m\le2\times10^5$,边权 $0\le w\le10^{18}$。路径允许重复点和边。对每个 $u<v$,每一种可由某条 $u\to v$ 路径得到的不同 XOR 值 $s$ 形成三元组 $(u,v,s)$;求所有 $s$ 之和模 $10^9+7$。
枚举简单路径已经指数级,允许重复边似乎更大;但同一闭合绕行做两次会 XOR 抵消,所以所有可添加绕行形成 $\mathbb F_2$ 线性空间。
在一个连通分量中任选 DFS 树并令 $d_v$ 为根到 $v$ 的树路 XOR。每条图边给出闭合走法值 $c=d_u\oplus d_v\oplus w$,把全部 $c$ 插入线性基 $B$。任意 $u\to v$ 走法与树路之差是若干闭合走法,故其 XOR 属于
$$ d_u\oplus d_v\oplus\operatorname{span}(B). $$
反过来,每个基本环都可从树路中绕行加入,任意线性组合均可实现,所以该集合完整。
设基秩为 $r$。逐位 $b$:
各连通分量之间无路径,独立求和。
树势能分解证明每条可达路径值都在上述仿射空间;基本环绕行证明空间每个值都有实际路径,且线性基只保留不同 XOR 值,不会按不同走法重复计数。逐位计数是对有限线性空间上的非零线性函数二等分,故求和准确。
DFS 与扫描边 $O(n+m)$;每个环值插入 60 位线性基,时间 $O(60m+60n)$,空间 $O(n+m)$。
for each connected component:
DFS tree -> potential d[v]
basis = empty
for each component edge (u,v,w):
basis.insert(d[u] xor d[v] xor w)
r = basis.rank
for bit b in 0..59:
if span(basis) can set bit b:
count = C(size,2) * 2^(r-1)
else:
count = ones_in_d[b] * zeros_in_d[b] * 2^r
answer += count * 2^b
树势能加环空间是无向图 XOR 路径的通用分解;在普通加法最短路中,绕环代价不会按两次抵消,因此不能照搬线性空间模型。
为什么固定端点的可达集合是仿射空间而不是线性空间?某一位可变化时为什么恰有一半空间向量为 1?
用 $n\le7$、小边权,在 (vertex,xor) 状态图上暴力枚举全部可达值对拍。复盘时必须解释“为什么统计的是不同 s,而不是不同路径”。