bzoj2132 網路流 最小割 圈地計畫

2021-08-17 02:09:11 字數 2355 閱讀 6136

description

最近房地產商gdoi(group of dumbbells or idiots)從noi(nuts old

idiots)手中得到了一塊開發土地。據了解,

這塊土地是一塊矩形的區域,可以縱橫劃分為n×m塊小區域。gdoi要求將這些區域分為商業區和工業區來開發。根

據不同的地形環境,每塊小區域建造商業區和工業區能取得不同的經濟價值。更具體點,對於第i行第j列的區域,

建造商業區將得到aij收益,建造工業區將得到bij收益。另外不同的區域連在一起可以得到額外的收益,即如果區

域(i,j)相鄰(相鄰是指兩個格仔有公共邊)有k塊(顯然k不超過4)型別不同於(i,j)的區域,則這塊區域能增加k

×cij收益。經過tiger.s教授的勘察,收益矩陣a,b,c都已經知道了。你能幫gdoi求出乙個收益最大的方案麼?

input

輸入第一行為兩個整數,分別為正整數n和m,分別表示區域的行數和列數; 第2到n+1列,每行m個整數,表示商業區收益矩陣a;

第n+2到2n+1列,每行m個整數,表示工業區收益矩陣b; 第2n+2到3n+1行,每行m個整數,表示相鄰額外收益矩陣c。

任何數字不超過1000」的限制

output

輸出只有一行,包含乙個整數,為最大收益值。

sample input

3 3

1 2 3

4 5 6

7 8 9

9 8 7

6 5 4

3 2 1

1 1 1

1 3 1

1 1 1

sample output

hint

【資料規模】

對於100%的資料有n,m≤100

題解

跑樸素最小割的話,我們會發現乙個問題

設兩個點(i,j),(x,y),處於不同集合,那麼他們中間的那條邊其實是一定要割去的,也就是c[i][j]+c[x][y]肯定會損失。如果想不損失的話這個玩意要建負權。。

所以我們黑白染色。

相鄰的格仔連邊不同

設白點 st->點連邊 流量a[i][j],點->ed連邊,流量b[i][j]

黑點相反

那麼這樣我們可以發現,當黑點與白點同在乙個集合時,他們其實是不同的地。。那麼中間連的c[i][j]+c[x][y]不會損失,反之亦然

#include

#include

#include

#include

#include

using

namespace

std;

struct node

a[4110000];int len,last[11000];

const

int dx[4]=;

const

int dy[4]=;

void ins(int x,int y,int c)

int h[11000],list[2500000],head,tail,st,ed;

bool bt_h()

}head++;

}if(h[ed]>0)return

true;

return

false;

}int findflow(int x,int f)

int n,m;

int a[110][110],b[110][110],c[110][110];

int col[110][110];

int pt(int x,int y)

int main()

st=n*m+1;ed=n*m+2;

memset(col,0,sizeof(col));

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

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

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

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

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

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

for(int k=0;k<=3;k++)

int ans=0;

while(bt_h())ans+=findflow(st,999999999);

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

return

0;}

bzoj2132 圈地計畫 網路流最小割

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

BZOJ2132 圈地計畫(最小割)

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

BZOJ 2132 圈地計畫 最小割

題目大意 有乙個n m的矩陣,在矩陣中填1或2會得到不同的權值。相鄰的兩個格仔數字不相同會得到額外的權值,求最大權值 最小割模型 同一事件兩種選擇獲得不同收益,一定條件下有額外收益,求最大收益。在本題中,相鄰格仔填不同數字會獲得額外收益,於是將矩陣黑白染色 i j 1 每個黑色格仔與s連邊代表填1,...