ZJOI2007 矩陣遊戲

2022-03-25 18:50:56 字數 1079 閱讀 8267

這道題是乙個不錯的題,難點就在於建模。

交換操作過程中,同一行的黑塊是不會被拆開,同理縱塊也是。

接著目標狀態就是一條對角線上全都是黑塊。

我們倒過來想,看看能否從目標狀態變成初始狀態。

對於所有的黑塊$(x,y)$(左邊行右邊列,點分行列),我們連條邊$x \leftarrow \rightarrow y$。

顯然目標狀態應該是完全匹配的。

交換兩行$i$、$j$,所有在行$i$、$j$的黑塊的橫座標交換,縱座標不變就是將所有指向行$i$的點的指向改成行$j$,所有指向行$j$的點改指向行$i$。

同理縱座標也是。

等效替代下發現實質上與交換點$i$和點$j$的效果一樣。

也就是從目標狀態無論怎樣變換匹配數不變且滿。

且以上操作可逆。

所以我們檢查下原圖是否能全部匹配即可。

1 #include 2

3using

namespace

std;45

const

int maxn = 200 + 5;6

7int

vis[maxn], lk[maxn], e[maxn][maxn];

8int

n, t;910

bool find(int u, int

tag) 18}

19return

false;20

}2122int

main()

32 memset(vis, 0, sizeof

(vis));

33 memset(lk, 0, sizeof

(lk));

34 register int cnt = 0;35

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

36if (find(i, i)) cnt++;

37if (cnt == n) printf("

yes\n");

38else printf("

no\n");

39}40return0;

41 }

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

行交換操作 選擇矩陣的任意兩行,交換這兩行 即交換對應格仔的顏色 列交換操作 選擇矩陣的任意兩列,交換這兩列 即交換對應格仔的顏色 遊戲的目標,即通過若干次操作,使得方陣的主對角線 左上角到右下角的連線 上的格仔均為黑色。對於某些關卡,小q百思不得其解,以致他開始懷疑這些關卡是不是根本就是無解的!於...