BZOJ 2132 圈地計畫 最小割

2021-07-28 11:04:37 字數 990 閱讀 1844

題目大意:有乙個n*m的矩陣,在矩陣中填1或2會得到不同的權值。相鄰的兩個格仔數字不相同會得到額外的權值,求最大權值

最小割模型:同一事件兩種選擇獲得不同收益,一定條件下有額外收益,求最大收益。

在本題中,相鄰格仔填不同數字會獲得額外收益,於是將矩陣黑白染色(i+j&1),每個黑色格仔與s連邊代表填1,與t連邊代表填2,白色反過來。在相鄰的兩點之間連一條容量為收益的邊。跑一邊最大流求最小割用總和減去即為答案。

#include 

#include

#include

#define n 105

#define inf 2000000000

using namespace std;

const int xx=,yy=;

struct edge

}e[n*n

*n];

int n,m,tot=-1,s,t,fir[n*n],d[n*n],cur[n*n];

inline int

pos(int

x,int

y) void add_edge(int from,int to,int cap)

bool bfs()

}return false;

}int dfs(int

x,int now)

return flow;

}int dinic()

return ans;

}int main()

for(int i=1;i<=n;i++)

for(int j=1;j<=m;j++)

for(int

x=1;x

<=n;x++)

for(int

y=1;y

<=m;y++)

}int ans=sum-dinic();

printf("%d\n",ans);

return

0;}

BZOJ2132 圈地計畫(最小割)

傳送門 抄黃學長的題解。黑白染色,對於每個黑點a,s a w商業,a t w工業,對於每個白點b,s b w工業,b t w商業,對於每對有關係的兩點a,b,a b c1 c2。這個建模感受一下就是對的。看黃學長的姿勢之後發現中間那兩條邊沒加反向邊,但是據atp說加了也沒錯,只是慢了一點。應該就是兩...

BZOJ2132 圈地計畫 最小割

最近房地產商gdoi group of dumbbells or idiots 從noi nuts old idiots 手中得到了一塊開發土地。據了解,這塊土地是一塊矩形的區域,可以縱橫劃分為n m塊小區域。gdoi要求將這些區域分為商業區和工業區來開發。根據不同的地形環境,每塊小區域建造商業區和...

BZOJ 2132 圈地計畫 最小割

首先黑白染色 因為相鄰的節點顏色必不同 相同顏色的節點之間沒有關係 沒有邊 然後add s,黑色點,a i j 黑色點,t,b i j s,白色點,b i j 白色點,t,a i j 因為黑色點和白色點同屬乙個s t才有額外貢獻 所以這裡a i j b i j 要交換連 sum初始為矩陣裡每個點的a...