首先黑白染色 因為相鄰的節點顏色必不同 相同顏色的節點之間沒有關係(沒有邊)
然後add(s,黑色點,a[i][j]) (黑色點,t,b[i][j])(s,白色點,b[i][j])(白色點,t,a[i][j])因為黑色點和白色點同屬乙個s/t才有額外貢獻 所以這裡a[i][j],b[i][j]要交換連
sum初始為矩陣裡每個點的a,b之和 對於每個點 向它四周相鄰的點連(u,v,c[i][j]+c[i'][j']) 注意這裡黑色到白色 白色到黑色都要連 因為有屬於s/t兩種情況
然後乙個點有x個相鄰點則sum+=x*c[i][j] 因為上面連的c[i][j]+c[i'][j']容量的邊其實有兩條但是卻不存在同時切兩條的情況 最多隻會切一條
#includeusingnamespace
std;
typedef
long
long
ll;typedef
intjqk;
intn, m;
int dir[4][2] = , , , };
int bl[105][105
];int sum = 0
;int a[105][105], b[105][105], c[105][105
];int
main()
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++)
else
for (int k = 0; k < 4; k++) }}
}printf(
"%d\n
", sum -dinic::dinic());
return0;
}
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,...
BZOJ2132 圈地計畫 最小割
最近房地產商gdoi group of dumbbells or idiots 從noi nuts old idiots 手中得到了一塊開發土地。據了解,這塊土地是一塊矩形的區域,可以縱橫劃分為n m塊小區域。gdoi要求將這些區域分為商業區和工業區來開發。根據不同的地形環境,每塊小區域建造商業區和...