考虑将记录的字符串看作一个二进制数 $$$c$$$,令 $$$W(c)$$$ 为最后记录的字符串所看成的二进制数为 $$$c$$$ 时,本质不同的科学家加入研讨厅的方式数。考虑一下如何求解 $$$W(c)$$$,对于每一个 $$$x\in V$$$,定义一个长为 $$$n$$$ 的 $$$01$$$ 向量 $$$v_x$$$,满足对于 $$$1\leq y\leq n$$$:
则不难发现,对于 $$$V$$$ 的一个子集 $$$V'$$$, 对于任意 $$$1\leq d\leq n$$$,有 $$$\left(\sum_{(d,i) \in E} [[d \in V'] = [i \in V']] \bmod 2\right) = \left(\bigoplus_{i \in V'} v_i\right)_d \oplus \deg_d$$$,因此有
$$$c_d = \left(\bigoplus_{i \in V'} v_i\right)_d \oplus \deg_d,$$$
则我们可以得到
$$$c = \left(\bigoplus_{i \in V'} v_i\right) \oplus \deg$$$。
则实际求解 $$$W(c)$$$ 变为了这样的一个问题,对于集合 $$$S=\{v_1,v_2,...,v_n\}$$$,求有多少个子集满足子集内所有向量的异或和为 $$$c\oplus \deg$$$,这是个经典问题:当这个元素在 $$$\operatorname{span}(S)$$$ 时结果为 $$$2^{cnt}$$$ ($$$cnt$$$ 为自由元个数),当这个元素不在 $$$\operatorname{span}(S)$$$ 时结果为 $$$0$$$。
现在考虑原问题,需要考虑 $$$?$$$ 的情况,如果对于所有 $$$S$$$ 中的向量,仅保留非问号的位,则不难得到按照上述方式求得的结果即为答案(由于仅保留非问号的位,导致 $$$S$$$ 的自由元可能变多,这个需要考虑),这乍一看是比较难以求解的。但注意到有一个奇怪的限制,通过仔细分析可以发现这个限制等价于对于每一个询问的非问号位置,形成的是一个树形的包含关系。
那么可以先将节点进行重标号,使得每一个询问非问号的位置恰好构成一段区间,然后就可以在上面进行分治,令 $$$\text{solve}(l,r)$$$ 表示处理区间在 $$$[l,r]$$$ 以内的所有询问,考虑按照如下方式求解 $$$\text{solve}(l,r)$$$,令 $$$S$$$ 为处理 $$$[l,r]$$$ 所需要考虑的向量集合:
$$$1.$$$ 令 $$$mid=\lfloor \frac{l+r}{2}\rfloor$$$,处理满足 $$$l'\leq mid,r'\geq mid+1$$$ 的询问 $$$[l',r']$$$,由于区间构成了树形关系,所以所有跨过 $$$mid$$$ 的区间一定形如 $$$[l_1,r_1]\subseteq [l_2,r_2]\subseteq [l_3,r_3]...$$$ 的形式,因此可以采取逐步删位的方法。初始时为大区间构建一个线性基,从大区间开始一个一个删去线性基中的位,通过重标号使得删去的位都是从高到低,在删除时直接将删除那一位的元素重新插入线性基即可,通过维护出线性基,即可非常容易地得出自由元个数。
$$$2.$$$ 现在分治处理 $$$[l,mid],[mid+1,r]$$$,此时,在处理子问题时我们无需将 $$$S$$$ 中的全部考虑一遍,仅需下放仅保留 $$$[l,mid]$$$ 的位后的线性基 $$$S_1$$$ 给 $$$solve(l,mid)$$$,下放仅保留 $$$[mid+1,r]$$$ 的位后的线性基 $$$S_2$$$ 给 $$$\text{solve}(mid+1,r)$$$,这样在每一次处理 $$$\text{solve}(l,r)$$$ 时,$$$|S|\leq r-l+1$$$。
令处理一个大小为 $$$n$$$ 的区间的 $$$\text{solve}$$$ 时预处理的时间复杂度为 $$$T(m)$$$,则可以得到 $$$T(m)=2T(\frac{m}{2})+\frac{nm^2}{w}$$$,由主定理可以得到 $$$T(n)=\frac{n^3}{w}$$$,而查询的时间复杂度为 $$$\frac{qn^2}{w}$$$,因此总的时间复杂度为 $$$O(\frac{(n+q)n^2}{w})$$$。