P3159 CQOI2012 交換棋子 網路流

2022-05-01 13:57:07 字數 814 閱讀 8817

有乙個n行m列的黑白棋盤,你每次可以交換兩個相鄰格仔(相鄰是指有公共邊或公共頂點)中的棋子,最終達到目標狀態。要求第i行第j列的格仔只能參與mi,j次交換。

輸入格式:

第一行包含兩個整數n,m(1<=n, m<=20)。以下n行為初始狀態,每行為乙個包含m個字元的01串,其中0表示黑色棋子,1表示白色棋子。以下n行為目標狀態,格式同初始狀態。以下n行每行為乙個包含m個0~9數字的字串,表示每個格仔參與交換的次數上限。

輸出格式:

輸出僅一行,為最小交換總次數。如果無解,輸出-1。

輸入樣例#1: 複製

3 3

110000

001000

110100

222222

222

輸出樣例#1: 複製

4

網路流極品好題

一開始拆成兩個點問題很大 因為中間的點是交換兩次 而路徑兩端的點只用交換一次 這點很難處理

可以將點拆為三個點

如果原圖有點  s-mid-1-0  如果末圖有點 mid-t-1-0   

設棋盤的交換次數為f

如果該點的原圖和末圖的情況相同  那麼 出去的流量一定等於進來的流量  所以in和out  都連  f/2

如果原圖有黑點  末圖沒有  那麼說明出點一定大於入點  in-mid-f/2-0   mid-out-(f+1)/2-0  

然後連八向圖

P3159 CQOI2012 交換棋子

相當神奇的費用流拆點模型 最開始我想到把交換黑色棋子看成乙個流流動的過程,流從乙個節點流向另乙個節點就是交換兩個節點,然後把乙個位置拆成兩個點限制流量,然後就有了這樣的建圖方法 s向所有初始是黑色點的入點連cap 1,cost 0的邊,最後是黑色點的出點向t連一條cap 1,cost 0的邊,然後對...

P3159 CQOI2012 交換棋子

有乙個n行m列的黑白棋盤,你每次可以交換兩個相鄰格仔 相鄰是指有公共邊或公共頂點 中的棋子,最終達到目標狀態。要求第i行第j列的格仔只能參與mi,j次交換。第一行包含兩個整數n,m 1 n,m 20 以下n行為初始狀態,每行為乙個包含m個字元的01串,其中0表示黑色棋子,1表示白色棋子。以下n行為目...

2668 cqoi2012 交換棋子

time limit 3 sec memory limit 128 mb submit 1136 solved 423 submit status discuss 有乙個n行m列的黑白棋盤,你每次可以交換兩個相鄰格仔 相鄰是指有公共邊或公共頂點 中的棋子,最終達到目標狀態。要求第i行第j列的格仔只能...