Codeforces 736D

题意

给出一个 n×n 的 0-1方阵 M M 中恰有 m 个位置为 1,其它为 0。保证有:

det(M)1mod2

M 中的每个 1,回答:把这个 1 修改为 0 后,det(M)mod2

约定: n2000 mmin(n2,500000)

Sol

可以把方阵的每个行向量取出来,记第 i 个行向量为 vi

因为 det(M)1 ,意味着行向量线性无关,所以任意一个 n 维 0-1向量可以唯一写为这 n 个行向量的线性表示。

我们把第 i 维为 1,其它维为 0 的一个 n 维向量记为 ei

那么对于每一个 1in ei 都可以写为 {vi} 的线性表示。

原问题等价于修改某一个行向量中的某个 1 0 后,询问这些行向量是否仍然线性无关。

我们记被修改的行向量为 vi ,其中 vi 的第 j 位被修改为 0

考虑如果行向量线性相关的话,意味着存在一个行向量的子集,满足它们的异或和为 0 。因为原行向量线性无关,所以这个子集一定包括 vi。考虑把 vi 修改回去,则这个子集的异或和恰好为 ej

分析到这里,不难得到:修改 Mi,j 后,不改变行列式的奇偶性的充要条件为: ej 的线性表示中, vi 的系数为 0

我们可以通过高斯消元,处理出每个 ej (1jn) 关于 {vi} 的线性表示,则所有询问都可以 O(1) 回答。

回顾整个计算过程,实质上是求了 M 的逆矩阵

对 0-1 矩阵的高斯消元可以利用 bitset 并行计算,时间复杂度 O(n364)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值