设答案集合为 $T$,所有 $S_i$ 的交集为 $I$,则:
- $T\cap I=\varnothing$,因为 $I$ 中的元素本来就在所有 $S_i$ 中;
- $T\cup I=T\cup(S_1\cap\cdots\cap S_n)=(T\cup S_1)\cap\cdots\cap(T\cup S_n)$。由于每个 $T\cup S_i$ 都是线性空间,而线性空间的交仍是线性空间,因此 $T\cup I$ 必然对异或封闭。
不妨用线性基维护 $U=T\cup I$,最后再还原出答案 $T=U-I$。记 $\operatorname{span}(S)$ 为 $S$ 张成的线性空间,即包含 $S$ 的最小异或封闭集合。
显然至少有 $U\supseteq \operatorname{span}(S_i)-S_i$,于是首先需要求出 $\operatorname{span}(S_i)-S_i$ 对 $U$ 贡献了哪些基。为了控制复杂度,分两种情况:
- 若 $\left|\operatorname{span}(S_i)-S_i\right|>\frac12|\operatorname{span}(S_i)|$,则 $\operatorname{span}(S_i)-S_i$ 不可能包含在 $\operatorname{span}(S_i)$ 的真子空间中,因此它张成的空间就是整个 $\operatorname{span}(S_i)$。此时直接将 $S_i$ 逐元素插入线性基,时间复杂度为 $O(c_im)$;
- 若 $\left|\operatorname{span}(S_i)-S_i\right|\le\frac12|\operatorname{span}(S_i)|$,则 $|\operatorname{span}(S_i)|\le 2|S_i|$,可以暴力枚举整个 $\operatorname{span}(S_i)$ 再将其中不属于 $S_i$ 的元素插入线性基,时间复杂度同样为 $O(c_im)$。
令 $U_{\text{init}}=\operatorname{span}\left(I\cup(\operatorname{span}(S_1)-S_1)\cup\cdots\cup(\operatorname{span}(S_n)-S_n)\right)$,已知 $U\supseteq U_{\text{init}}$ 的条件下,$T\cup S_i=U\cup\operatorname{span}(S_i)$,而两个线性空间的并仍为线性空间当且仅当其中一个包含另一个,因此只可能有 $U\subseteq\operatorname{span}(S_i)$ 或 $U\supseteq\operatorname{span}(S_i)$。
考虑如下算法。初始 $U\leftarrow U_{\text{init}}$,过程中线性基可能会扩展,即当发现某个 $U\nsubseteq\operatorname{span}(S_i)$(此时强制要求 $U\supseteq\operatorname{span}(S_i)$),就将 $S_i$ 逐元素插入线性基,容易证明停止扩展时 $T=U-I$ 是唯一且最小的。显然 $U$ 最多扩展 $O(m)$ 次,如果每次扩展后重新判断整个 $U$ 是否为每个 $\operatorname{span}(S_i)$ 的子空间,复杂度不优;正确做法是预先为每个 $S_i$ 建立线性基,每当 $U$ 新增一个基 $b$,只需判断 $b$ 能否被各个还未归为“ $U\supseteq\operatorname{span}(S_i)$ 类”的 $S_i$ 的线性基表示,这样总时间复杂度为 $O\left(nm^2+\left(\sum c_i\right)m\right)$。如果不慎写成了 $O(nm^3)$、$O\left(\left(\sum c_i\right)m^2\right)$、$O(2^mm^2)$,大概率无法(现场)通过此题。