有以下引理:
不存在两个合法环,他们存在公共边。
证明:公共边边权为 \(z\),第一个环除去公共边为 \(x\),第二个环除去公共边为 \(y\)。
则有 \(x \oplus z = 1\) \(y \oplus z = 1\),则存在另外一个简单环的权值为 \(x\oplus y = 0\),所以该图不合法。
我们知道一颗树上是没有环的。
所以一颗树不影响非树边的加入。
我们考虑先在这些边按照加边顺序里做一颗生成树出来。
这些边一定可以存在。
那么我们考虑那些非树边。
我们在加入一条非树合法边时,在 \((u,v)\) 这条路径上打上一个\(tag\)。
判断一条非树边是否合法时,我们可以查询 \((u,v)\) 是否有标记,并查询 \((u,v)\) 的异或和。