BZOJ 2132 圈地計畫

2022-05-14 05:10:55 字數 1544 閱讀 3440

最近房地產商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求出乙個收益最大的方案麼?

輸入第一行為兩個整數,分別為正整數n和m,分別表示區域的行數和列數;第2到n+1列,每行m個整數,表示商業區收益矩陣a;第n+2到2n+1列,每行m個整數,表示工業區收益矩陣b;第2n+2到3n+1行,每行m個整數,表示相鄰額外收益矩陣c。第一行,兩個整數,分別是n和m(1≤n,m≤100);

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

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

3 31 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

81【資料規模】

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

網路流的另一種建模姿勢

二元組——>最小割

把圖黑白染色,黑格工業連s,商業連t,白格反之。。。

黑白格相互之間連邊,流量為c[x][y]+c[nx][ny]

1 #include2 #include3 #include4 #include5

using

namespace

std;

6const

int inf=100000000,n=110;7

struct eee[n*n*n];

8int head[n*n],q[n*n],dis[n*n],a[n][n],b[n][n],c[n][n],col[n][n];

9int fx[4]=,fy[4]=;

10int s,t=10001,n,m,cnt=1

,ans,w,mid,tot;

11bool

mark[n];

12void ins(int u,int v,int

w)13

14void insert(int u,int v,int

w)15

1617

bool

bfs()30}

31}32if (dis[t]==inf) return

0; return1;

33}3435

int dinic(int now,int

f)47}48

return f-rest;49}

5051

void

build()68}

69}7071

intmain()

bzoj2132 圈地計畫

有個n m的矩形,每個區域可以建造商業區或工業區,分別獲得ai,j和bi,j的收益。乙個格仔如果有與其相鄰的k個格仔與其型別不同,則可以帶來ci,j的收益。求最大收益 我們可知,i,j和k,l兩個格仔型別不同就會帶來ci,j ck,l的收益。這是經典的二元關係,是網路流問題。x選商業 x選工業 y選...

bzoj 2132 圈地計畫

time limit 2 sec memory limit 256 mb submit 918 solved 417 submit status discuss 最近房地產商gdoi group of dumbbells or idiots 從noi nuts old idiots 手中得到了一塊開...

BZOJ2132 圈地計畫

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