Codeforces 736D

題意

給出一個 n×n 的 0-1方陣 MM 中恰有 m 個位置爲 1,其它爲 0。保證有:

det(M)1mod2

M 中的每個 1,回答:把這個 1 修改爲 0 後,det(M)mod2

約定:n2000mmin(n2,500000)

Sol

可以把方陣的每個行向量取出來,記第 i 個行向量爲 vi

因爲 det(M)1 ,意味着行向量線性無關,所以任意一個 n 維 0-1向量可以唯一寫爲這 n 個行向量的線性表示。

我們把第 i 維爲 1,其它維爲 0 的一個 n 維向量記爲 ei

那麼對於每一個 1inei 都可以寫爲 {vi} 的線性表示。

原問題等價於修改某一個行向量中的某個 10 後,詢問這些行向量是否仍然線性無關。

我們記被修改的行向量爲 vi ,其中 vi 的第 j 位被修改爲 0

考慮如果行向量線性相關的話,意味着存在一個行向量的子集,滿足它們的異或和爲 0 。因爲原行向量線性無關,所以這個子集一定包括 vi 。考慮把 vi 修改回去,則這個子集的異或和恰好爲 ej

分析到這裏,不難得到:修改 Mi,j 後,不改變行列式的奇偶性的充要條件爲:ej 的線性表示中,vi 的係數爲 0

我們可以通過高斯消元,處理出每個 ej (1jn) 關於 {vi} 的線性表示,則所有詢問都可以 O(1) 回答。

回顧整個計算過程,實質上是求了 M 的逆矩陣

對 0-1 矩陣的高斯消元可以利用 bitset 並行計算,時間複雜度 O(n364)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章