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 ...