ZJOI2007 矩陣遊戲

2021-08-17 14:25:08 字數 894 閱讀 3297

霧。

既然我們要求每行每列都要有乙個 1 ,那麼我們就可以這樣進行建立了這個二分圖。

左邊有 n 個點,代表行,右邊有 n 個點,代表列。

做這題的主要目的是打板子

二分圖匹配用的dinic

bzoj 1059

這裡寫鏈結內容

#include 

#include

#include

#include

#include

const

int inf=0x7fffffff;

const

int maxm=1e6+100;

int head[maxm],to[maxm<<1],cap[maxm<<1],net[maxm<<1];

int cnt=1;

inline

void add(int u,int v,int c)

inline

void addedge(int u,int v,int c)

int deep[maxm];

std::queue

dl;

namespace maxflow

return deep[t]!=-1;

}int dfs(int now,int flow,int t)

}if(!used) deep[now]=-1;

return used;

}int dinic(int s,int t)

}void work()

}if(maxflow::dinic(s,t)==n) printf("yes\n");

else

printf("no\n");

}int main()

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

矩陣遊戲 ZJOI2007

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