题解:P12839 [蓝桥杯 2025 国 B] 涂格子
有趣,很好的转化。
本题把“同色连通块必须是矩形且黑白棋盘相邻”抽象成:存在行变量 \(r_x\in\{0,1\}\) 与列变量 \(c_y\in\{0,1\}\),使得格子 \((x,y)\) 的颜色为 \(r_x\oplus c_y\)。于是每条限制 \(r_{x_i}\oplus c_{y_i}=c_i\) 就是一条二分图的带权边,顶点左侧是出现过的行、右侧是出现过的列。用带权并查集维护异或距离,合并时若两点已连通却出现 \(xr[a]\oplus xr[b]\ne w\) 即判矛盾并输出 \(0\)。
若无矛盾,设出现过的行数 \(R\)、列数 \(C\),这些顶点的连通块数为 \(s\)。因为每并一次块秩减一,所以方程组秩为 \(R+C-s\)。自由度即剩余可任意指定的行列变量数,再扣除整体翻转一度自由:\((n-R)+(m-C)+s-1\)。合法方案数就是 \(2^{(n-R)+(m-C)+s-1}\bmod 998244353\),用快速幂计算。
用 unordered_map 离散化行列坐标;把列顶点编号平移一个常量放进同一并查集数组;并查集按路径压缩与按秩合并实现带权异或。
时间复杂度 \(O(k\,\alpha(k))\)。

浙公网安备 33010602011771号