ZJOI2007 矩陣遊戲

2022-05-06 23:45:12 字數 691 閱讀 9074

鏈結

把行和列看成二分圖的兩個點集

目標是要讓每行每列都匹配

顯然更改行和列不會影響匹配的結果

即行和列最大匹配為n時一定滿足

#includeusing

namespace

std;

const

int maxn = 500 + 10

;inline

intread()

while(ch<'

0'||ch>'9'

);

dowhile(ch>='

0'&&ch<='9'

);

return f*x;

}int

t;int

n;int

g[maxn][maxn];

intvis[maxn];

intli[maxn];

inline

bool dfs(int

x) }

}return0;

}int

main()

memset(li,

0,sizeof

(li));

if(ans==n) printf("

yes\n");

else printf("

no\n");

}}

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 顯然目標狀...