ZJOI2007 矩陣遊戲

2022-05-19 10:00:25 字數 602 閱讀 6816

題目:洛谷p1129、bzoj1059。

題目大意:有正方形棋盤,每個點都是白色或黑色。現在可以任意交換某兩行或兩列的所有格仔,問是否可能使主對角線的所有格仔都為黑色?

解題思路:經過觀察和思考,我們可以發現,要使條件達成,必須每行每列都存在黑格仔。

如果某一行(列)沒有,則必定存在一行(列)全是白色,則條件無法達成。

反之,一定可以通過一系列移動,從而滿足條件。

所以轉化為二分圖匹配,若匹配數與行數相等,則可行,否則不可行。

匈牙利即可。

c++ code:

#include#include#includeint n,lf[202];

bool b[202][202],vis[202];

inline int readint()

bool dfs(int u)

}return false;

}int main()

puts(ok?"yes":"no");

}return 0;

}

ZJOI2007 矩陣遊戲

霧。既然我們要求每行每列都要有乙個 1 那麼我們就可以這樣進行建立了這個二分圖。左邊有 n 個點,代表行,右邊有 n 個點,代表列。做這題的主要目的是打板子 二分圖匹配用的dinic bzoj 1059 這裡寫鏈結內容 include include include include include ...

ZJOI2007 矩陣遊戲

我們發現同行同列的點無論經過多少次變換仍然同行或同列,所以題目可轉換為能不能找到n個互相不同行或同列的點。那麼我們用二分圖求一下最大匹配即可。include using namespace std const int n 205 int t,n,x,ans int match n 1 bool vi...

ZJOI2007 矩陣遊戲

這道題是乙個不錯的題,難點就在於建模。交換操作過程中,同一行的黑塊是不會被拆開,同理縱塊也是。接著目標狀態就是一條對角線上全都是黑塊。我們倒過來想,看看能否從目標狀態變成初始狀態。對於所有的黑塊 x,y 左邊行右邊列,點分行列 我們連條邊 x leftarrow rightarrow y 顯然目標狀...