P1129 ZJOI2007 矩陣遊戲

2022-04-10 03:57:18 字數 1404 閱讀 5031

link

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

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

本題單測試點內有多組資料

第一行包含乙個整數 \(t\),表示資料的組數,對於每組資料,輸入格式如下:

第一行為乙個整數,代表方陣的大小 \(n\)。 接下來 \(n\) 行,每行 \(n\) 個非零即一的整數,代表該方陣。其中 \(0\) 表示白色,\(1\) 表示黑色。

對於每組資料,輸出一行乙個字串,若關卡有解則輸出yes,否則輸出no

輸入 #1

2

20 0

0 13

0 0 1

0 1 0

1 0 0

輸出 #1

no

yes

資料規模與約定

題解:自己匈牙利演算法寫炸了,調了好半天,原地退役。

看到資料範圍比較小,我們可能會想到是網路流的毒瘤題或者是二分圖匹配。

我們主要考慮怎麼建邊。

題目中要求的最終的狀態就是 對角線都是黑色的,也就是對於每一行至少要有一列且每一列不能重複,與他對應的格仔為黑色。

那麼我們可以把每一行放在左邊,每一列放在右邊,對於每乙個為黑色的格仔將他的行與列連邊。

然後跑一邊匈牙利或者 \(dinic\) 演算法的模板就可以。

code

#include#include#include#includeusing namespace std;

int n,m,tot,flag,x,t;

int head[510],match[510];

bool vis[510];

inline int read()

while(ch >= '0' && ch <= '9')

return s * w;

}struct node

e[100100];

void add(int x,int y)

bool dfs(int x)

} }return false;

}int main()

} flag = 0;

for(int i = 1; i <= n; i++)//二分圖最大匹配

}if(flag == 1) printf("no\n");

else printf("yes\n");

} return 0;

}

洛谷P1129 ZJOI2007 矩陣遊戲 題解

這道題不是很好想,但只要想的出來,不成問題。舉幾個例子,我們發現,對於任何數來說,同一行的永遠在同一行,同一列的永遠在同一列 進一步研究,發現所有行所有列要有1,且至少要有n個1兩兩不同行不同列 對於每個11 1,設座標為 x,y x,y x y 那麼xx x行向yy y列連邊 判斷是否有完全匹配 ...

洛谷P1129 ZJOI2007 矩陣遊戲 題解

這道題不是很好想,但只要想的出來,不成問題。舉幾個例子,我們發現,對於任何數來說,同一行的永遠在同一行,同一列的永遠在同一列 進一步研究,發現所有行所有列要有1,且至少要有n個1兩兩不同行不同列 對於每個1 1,設座標為 x,y x y 那麼x x行向y y列連邊 判斷是否有完全匹配 都能匹配上 能...

ZJOI2007 矩陣遊戲

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