第一次寫這種修籬笆的題目,上次好像曉陽dalao寫了乙個堵人的。好像還有能改變土地屬性的。
#includeusingnamespace
std;
#define ll long long
/*dinic begin
*/const
int maxn=10100
;const
int maxm=100010
;const
int inf=0x3f3f3f3f
;struct
edgeedge[maxm];
inttol;
inthead[maxn];
void
init()
void addedge(int u,int v,int
w)int
q[maxn];
intdep[maxn],cur[maxn],sta[maxn];
bool bfs(int s,int t,int
n) }
}return
false;}
int dinic(int s,int t,int
n) maxflow+=tp;
for(int i=tail-1;i>=0;i--)
u=edge[sta[tail]^1
].to;
}else
if(cur[u]!=-1&&edge[cur[u]].cap>edge[cur[u]].flow
&&dep[u]+1==dep[edge[cur[u]].to])
else
cur[u]=edge[cur[u]].next;}}
}return
maxflow;}/*
dinic end
*/int g[105][105
];int
m,n;
intmain()
}int s=0,t=n*m+1
;
for(int i=1;i<=n;i++)
else
if(g[i][j]==2
) }
}for(int i=1;i<=n;i++)
if(i-1>=1&&g[i-1][j]!=1
)
if(j+1
<=m&&g[i][j+1]!=1
)
if(i+1
<=n&&g[i+1][j]!=1
)
//羊可以在所有和他不同的格仔修籬笆
}
/*else if(g[i][j]==0)
if(i-1>=1&&g[i][j]!=g[i-1][j])
if(j+1<=m&&g[i][j]!=g[i][j+1])
if(i+1<=n&&g[i][j]!=g[i+1][j])
}*/}
}int maxflow=dinic(s,t,t);
printf(
"%d\n
",maxflow);
}
洛谷P2598 狼和羊的故事
輸入格式 檔案的第一行包含兩個整數n和m。接下來n行每行m個整數,1表示該格仔屬於狼的領地,2表示屬於羊的領地,0表示該格仔不是任何乙隻動物的領地。輸出格式 檔案中僅包含乙個整數ans,代表籬笆的最短長度。解析 一看就是最小割.源點 狼 inf 狼 羊或空 1 空 狼或羊 1 羊 匯點 inf 要注...
P2598 ZJOI2009 狼和羊的故事
既可以是一眼題又可以是有些東西的題 一眼就可以看出來,要用最小割把狼和羊分開,那 s 向狼連 inf 羊向 t 連 inf 每個點向周圍連 1,考慮割掉的邊是柵欄 之所以說它有些東西,是應為它可以表示成數學形式,考慮將狼劃分成 0 集合,將羊劃分成 1 集合,沒有歸屬的點隨便 如果兩個點不在同乙個集...
最小割 狼和羊的故事
狼愛上羊啊愛的瘋狂,誰讓他們真愛了一場 狼愛上羊啊並不荒唐,他們說有愛就有方向 orez聽到這首歌,心想 狼和羊如此和諧,為什麼不嘗試羊狼合養呢?說幹就幹!orez的羊狼圈可以看作乙個n m個矩陣格仔,這個矩陣的邊緣已經裝上了籬笆。可是drake很快發現狼再怎麼也是狼,它們總是對羊垂涎三尺,那首歌只...