BZOJ2132 圈地計畫

2022-05-19 20:40:31 字數 1329 閱讀 1546

給出乙個n*m的矩陣,每個格仔可以選擇成為2種狀態,分別獲得a[i][j]和b[i][j]的收益,並且能額外獲得c[i][j]*k(k為相鄰的與(i,j)不同狀態的格仔數)的收益,求出怎樣確定每個格仔的狀態使得總收益最大

最小割中黑白染色方法運用例題

%%%cherish_oi

一開始將相鄰的點染成黑白兩色,然後st連向黑點,流量為a[i][j],然後黑點連向ed,流量為b[i][j],白點反之

然後對於相鄰的點,將黑點連向白點,流量為c[i][j]+白點的c值

檢驗正確性:

正確答案並不一定是相鄰的點顏色都不一樣,那麼染色的目的就不是保證收益最大。

但是染完色之後再跑最小割我們可以發現:

如果某相鄰兩點異色的收益不如同色的收益,那麼這條路徑上關於相鄰異色的收益肯定會被割掉

如果異色收益更優,那割掉的肯定是乙個a收益加乙個b收益 那麼肯定是要最小割啊~

#include#include

#include

#include

#include

using

namespace

std;

struct

node

a[1110000];int len,last[110000

];int

n,m,st,ed;

void ins(int x,int y,int

c)int list[11000],h[110000

];bool

bt_h()

}head++;

}if(h[ed]>0) return

true

;

return

false;}

int findflow(int x,int

f) }

if(s==0) h[x]=0

;

returns;}

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

];int f[110][110

];int d[110][110

];int

main()

}int sum=0

;

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

else}}

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

}int ans=0

;

while(bt_h()==true

)

printf(

"%d\n

",sum-ans);

return0;

}

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要求將這些區域分為商業區和工業區來開發。根據不同的地形...