在乙個n×
m n×m
的矩陣上,有些點是狼或羊的領地,狼可以往四周範圍走,但籬笆會限制狼的行動,問最少要幾隻籬笆可以讓所有的羊免受侵害
狼可以向四周任意移動,那麼我們對每個格仔和其周圍的格仔連邊,容量為1,即我們只會切掉這些中間邊,而不能廢掉任意乙隻狼或羊,所以源點或者匯點與狼羊之間的容量為∞,這時跑最大流即可
有人說,既然狼可以任意移動,那麼除非羊周圍都有籬笆,否則狼都可以到達羊**,那直接輸出羊的個數乘4不就好了嗎?
這種想法目光十分短淺,我們可以簡單舉乙個例子
首先有四隻羊
羊 羊
羊 羊
那麼如果按照貪心的想法,是這樣的
——————
|羊|羊|
——————
|羊|羊|
——————
這樣子的話一共需要4
× ×
4=16個籬笆,但是如果這樣擺放的話
——————
|羊 羊|
|羊 羊|
——————
則只需要8個籬笆,所以貪心演算法不成立,pa
ssp as
s!
#include
#include
#include
#define m 160001
#define id(i,j) (~-i)*m+j
using
namespace
std;int n,m,tot,l[m],d[m],s,t,ans;
const
short dx[4]=;
const
short dy[4]=;
struct nodee[m<<1];
void add(int u,int v,int w)
;l[u]=tot++;
e[tot]=(node);l[v]=tot++;
return;
}bool bfs()}}
return
false;
}int dfs(int x,int flow)
e[i].w-=f;rest+=f;e[i^1].w+=f;
if(rest==flow) return flow;
}return rest;
}void dinic()
int main()
}dinic();
printf("%d",ans);
}
ZJOI 2009 狼和羊的故事(最小割)
zjoi 2009 狼和羊的故事 如果只有 1 1 和2 role presentation style position relative 2 2的話,那麼就將源點連羊,狼連匯點 容量 inf inf 狼羊之間連一條容量為 1 1 的邊。但是,有的領地既不是羊的,也不是狼的。你可能會想把 0 ro...
ZJOI2009 狼和羊的故事 最小割
給定一張 n times m 的網格圖,每個格仔可以取值為 1,2,0 要求將一些邊線染黑,使得所有的 1,2 被割開。n,m le 100 最小割,每個點向四周的點連邊 1 s to 1,2 to t infty 對於 0 點,只需要將其作為中間點,而不需要考慮其歸屬。include using ...
ZJOI2009 狼與羊的故事 最小割
給定乙個 n times m 方格矩陣,每個格仔可在 0,1,2 中取值。要求在方格的邊上進行劃分,使得任意聯通塊內不同時包含 1 和 2 的格仔。若對方格矩陣的形式感到困惑,我們可以先考慮圖上的形式。假設圖中有節點 w 1 q 1 s 1 s 2 且 w 1 與其它三者間各有一邊,此外 q 1 和...