BZOJ1412 狼和羊的故事(網路流)

2021-08-14 04:28:23 字數 1633 閱讀 3116

「狼愛上羊啊愛的瘋狂,誰讓他們真愛了一場;狼愛上羊啊並不荒唐,他們說有愛就有方向......」 orez聽到這首歌,心想:狼和羊如此和諧,為什麼不嘗試羊狼合養呢?說幹就幹! orez的羊狼圈可以看作乙個n*m個矩陣格仔,這個矩陣的邊緣已經裝上了籬笆。可是drake很快發現狼再怎麼也是狼,它們總是對羊垂涎三尺,那首歌只不過是乙個動人的傳說而已。所以orez決定在羊狼圈中再加入一些籬笆,還是要將羊狼分開來養。 通過仔細觀察,orez發現狼和羊都有屬於自己領地,若狼和羊們不能呆在自己的領地,那它們就會變得非常暴躁,不利於他們的成長。 orez想要新增籬笆的盡可能的短。當然這個籬笆首先得保證不能改變狼羊的所屬領地,再就是籬笆必須修築完整,也就是說必須修建在單位格仔的邊界上並且不能只修建一部分。

檔案的第一行包含兩個整數n和m。接下來n行每行m個整數,1表示該格仔屬於狼的領地,2表示屬於羊的領地,0表示該格仔不是任何乙隻動物的領地。

檔案中僅包含乙個整數ans,代表籬笆的最短長度。

2 22 2

1 1

10%的資料 n,m≤3

30%的資料 n,m≤20

100%的資料 n,m≤100

要求的是啥

把狼和羊的領地割開的最小代價

很顯然的最小割

s和羊的領地連容量為inf的邊

羊向狼的領地或者空地連容量為1的邊

再從空地連向空地或者狼

狼於t連inf

然後就是最小割

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

#define inf 1000000000

#define max 100000

#define maxl 10000000

inline

int read()

int g[500][500];

struct line

e[maxl];

int h[max],cnt;

int ans,s,t,n,m;

inline

void add(int u,int v,int w)

; h[u]=cnt++;

e[cnt]=(line);

h[v]=cnt++;

}int level[max];

int cur[max];

bool bfs()

}return level[t];

}int dfs(int u,int flow)

}return ret;

}int dinic()

return ret;

}int dd[4][2]=;

int main()

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

for(int j=1;j<=m;++j)

for(int k=0;k<4;++k)

printf("%d\n",dinic());

return

0;}

bzoj1412 狼和羊的故事 網路流

實際上就是在狼和羊之間連邊,求最小割。但是狼和羊的領地之間可能有空地,因此空地也要連。然後建立超級源點和超級匯點,跑最大流即可。ac 如下 include include include define inf 1000000000 define n 10005 define m 100005 usi...

bzoj1412 ZJOI2009 狼和羊的故事

description 狼愛上羊啊愛的瘋狂,誰讓他們真愛了一場 狼愛上羊啊並不荒唐,他們說有愛就有方向 orez聽到這首歌,心想 狼和羊如此和諧,為什麼不嘗試羊狼合養呢?說幹就幹!orez的羊狼圈可以看作乙個n m個矩陣格仔,這個矩陣的邊緣已經裝上了籬笆。可是drake很快發現狼再怎麼也是狼,它們總...

bzoj1412 ZJOI2009 狼和羊的故事

狼愛上羊啊愛的瘋狂,誰讓他們真愛了一場 狼愛上羊啊並不荒唐,他們說有愛就有方向 orez聽到這首歌,心想 狼和羊如此和諧,為什麼不嘗試羊狼合養呢?說幹就幹!orez的羊狼圈可以看作乙個n m個矩陣格仔,這個矩陣的邊緣已經裝上了籬笆。可是drake很快發現狼再怎麼也是狼,它們總是對羊垂涎三尺,那首歌只...