洛谷 P2598 狼和羊的故事 最大流

2022-05-07 22:54:20 字數 1608 閱讀 2961

第一次寫這種修籬笆的題目,上次好像曉陽dalao寫了乙個堵人的。好像還有能改變土地屬性的。

#includeusing

namespace

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很快發現狼再怎麼也是狼,它們總是對羊垂涎三尺,那首歌只...