二分圖匹配經典題。。
因為每一行的點不管如何交換也不會不在同一行,同理,同一列的點無論如何交換都仍然在這一列。
那麼也就是說要選則一些點使得滿足題意,那麼就可以去跑匹配了。
若a[i][j]是黑色的,那麼就從i行向j列連邊,最後跑匹配。
(如果用邊表的話一定要記得清空計數器。。。不然就炸了。。)
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7view code8using
namespace
std;910
const
int n=201000;11
int h[600],r[n],to[n],flow[n],d[n],cur[n],v[600
],tot,s,t;
12 queueq;
1314 inline void ins2(int u,int v,int
f)18
19 inline void ins(int u,int v,int
f)23
24 inline bool
bfs()36}
37}38return
v[t];39}
4041
int dfs(int x,int
f)51}52
return
ret;53}
5455
intmf()
61return
f;62}63
64int
main()
77for(int i=1;i<=n;i++)ins(s,i,1),ins(n+i,t,1
);78 puts(mf()==n?"
yes":"no"
);79
}80 }
bzoj1059 矩陣遊戲
time limit 10 sec memory limit 162 mb submit 4731 solved 2255 submit status discuss 矩陣的任意兩行,交換這兩行 即交換對應格仔的顏色 列交換操作 選擇矩陣的任意行列,交換這兩列 即交換 對應格仔的顏色 遊戲的目標,即...
BZOJ1059 矩陣遊戲
目錄題目傳送門 剛開始理解錯題意了,以為除了主對角線上之外都不能有 後來發現只要主對角線上可以都是 就是合法的了。實際上的題意就是讓你判斷 n 行與 n 列是否可以都匹配上,這樣就是乙個比較簡單的二分圖匹配,如果第 i,j 位置上為 就說明第 i 行與第 j 行能夠匹配,然後跑一遍匈牙利就行了。in...
bzoj 1059 矩陣遊戲
題解 很玄學的問題 因為不同行或者不同列的格仔,交換仍然不同行或者不同列 所以把問題轉化為從黑格仔裡選n個,它們的橫縱座標都不相同 然後二分圖匹配 兩個子集分別是橫座標和縱座標,如果求出的最大匹配為n,則成立,否則不成立 1 include2 include3 define maxn 410 4in...