bzoj2132 圈地計畫 網路流最小割

2022-05-20 09:59:29 字數 1760 閱讀 5128

題目描述

最近房地產商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題解

網路流最小割

只考慮相鄰的兩個,問題轉化為:$i$和$j$各有兩種選法:選擇a可以獲得$a_i$或$a_j$的收益;選擇b可以獲得$b_i$或$b_j$的收益;如果選擇不同,則會獲得$c_i+c_j$的收益。問最大收益。

這是乙個經典的最小割模型,建圖方法:s連向i,容量為$a_i$,i連向t,容量為b_i;s連向j,容量為$b_j$,i連向t,容量為$a_j$(這兩步是反轉源匯的過程)。i和j之間連容量為$c_i+c_j$的雙向邊。

因此總的建圖為:黑白染色,黑點正常連,白點反轉源匯,然後相鄰的點之間連邊。答案為$\sum\limits a_i+\sum\limits b_i+\sum\limits(c_i+c_j)-mincut$。

#include #include #include #define n 10010

#define m 1000010

#define pos(i , j) (i - 1) * m + j

using namespace std;

typedef long long ll;

const int inf = 1 << 30;

queueq;

int n , m , head[n] , to[m] , next[m] , cnt = 1 , s , t , dis[n];

ll a[110][110] , b[110][110] , c[110][110] , val[m];

void add(int x , int y , ll z)

ll link(int x1 , int y1 , int x2 , int y2)

bool bfs()

} }return 0;

}ll dinic(int x , ll low)

} return low - temp;

}int main()

} }while(bfs()) ans -= dinic(s , inf);

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

return 0;

}

bzoj 2132 圈地計畫 網路流

傳送門 很容易看出是用最小割來做,關鍵是要找出如何建圖。注意到如果不染色的話沒那麼好做,所以先把所有點黑板染色,s向黑點連流量為a i,j 的邊,白點向t連流量為b i,j 的邊。對於兩個相鄰的節點 x1,y1 和 x2,y2 分別從x向y和y向x連一條流量為c x1,y1 c x2,y2 的邊,然...

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 手中得到了一塊開...