description
最近房地產商gdoi(group of dumbbells or idiots)從noi(nuts oldinputidiots)手中得到了一塊開發土地。據了解,
這塊土地是一塊矩形的區域,可以縱橫劃分為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;output第n+2到2n+1列,每行m個整數,表示工業區收益矩陣b; 第2n+2到3n+1行,每行m個整數,表示相鄰額外收益矩陣c。
任何數字不超過1000」的限制
輸出只有一行,包含乙個整數,為最大收益值。sample input
3 3sample output hint1 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
【資料規模】題解對於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,...