bzoj1059 矩陣遊戲

2021-08-02 20:53:16 字數 1093 閱讀 9938

time limit: 10 sec  

memory limit: 162 mb

submit: 4731  

solved: 2255 [

submit][

status][

discuss]

矩陣的任意兩行,交換這兩行(即交換對應格仔的顏色)列交換操作:選擇矩陣的任意行列,交換這兩列(即交換

對應格仔的顏色)遊戲的目標,即通過若干次操作,使得方陣的主對角線(左上角到右下角的連線)上的格仔均為黑

色。對於某些關卡,小q百思不得其解,以致他開始懷疑這些關卡是不是根本就是無解的!!於是小q決定寫乙個程

序來判斷這些關卡是否有解。

第一行包含乙個整數t,表示資料的組數。接下來包含t組資料,每組資料第一行為乙個整數n,表示方陣的大

小;接下來n行為乙個n*n的01矩陣(0表示白色,1表示黑色)。

輸出檔案應包含t行。對於每一組資料,如果該關卡有解,輸出一行yes;否則輸出一行no。22

0 00 1

30 0 1

0 1 0

1 0 0

noyes

【資料規模】

對於100%的資料,n ≤ 200

題解難點就在於不好想到二分圖匹配

對於同行的兩個點 怎麼變都是同行 對於同列的一樣

但是對角線的每個點 行列都不同 所以求能不能找到n個互相不同行而且不同列的點。

也就是說每個行只能對應乙個列 每個列只能對應乙個行 求二分圖最大匹配即可 

#include#include#include#include#include#includeusing namespace std;

int flag[250],mat[250],mp[205][250],n;

bool km(int x)

} }return 0;

}int main()

int ans=0;

for(int i=1;i<=n;i++)

if(ans==n) printf("yes\n");

else printf("no\n");

} return 0;

}

bzoj1059 矩陣遊戲

二分圖匹配經典題。因為每一行的點不管如何交換也不會不在同一行,同理,同一列的點無論如何交換都仍然在這一列。那麼也就是說要選則一些點使得滿足題意,那麼就可以去跑匹配了。若a i j 是黑色的,那麼就從i行向j列連邊,最後跑匹配。如果用邊表的話一定要記得清空計數器。不然就炸了。1 include 2 i...

BZOJ1059 矩陣遊戲

目錄題目傳送門 剛開始理解錯題意了,以為除了主對角線上之外都不能有 後來發現只要主對角線上可以都是 就是合法的了。實際上的題意就是讓你判斷 n 行與 n 列是否可以都匹配上,這樣就是乙個比較簡單的二分圖匹配,如果第 i,j 位置上為 就說明第 i 行與第 j 行能夠匹配,然後跑一遍匈牙利就行了。in...

bzoj 1059 矩陣遊戲

題解 很玄學的問題 因為不同行或者不同列的格仔,交換仍然不同行或者不同列 所以把問題轉化為從黑格仔裡選n個,它們的橫縱座標都不相同 然後二分圖匹配 兩個子集分別是橫座標和縱座標,如果求出的最大匹配為n,則成立,否則不成立 1 include2 include3 define maxn 410 4in...