網路流 拆點 ISAP uva563

2021-06-20 12:58:39 字數 1034 閱讀 7619

題意:有乙個矩形城市,座標為整數的的點為路口,之間的連線為街道,現在有b個銀行要被搶劫,能不能在經過每個路口至多一次的情況下,劫匪能逃到城市邊緣

思路:網路流。建立乙個源點s和乙個匯點t。將n*m個點的每個點a拆成兩個點a1和a2且a1向a2連一條邊。如果點a處是銀行那麼s與a1連一條邊,如果b與a相鄰,那麼a2與b1連一條邊,對於所有的邊界點c,c2與匯點t連一條邊,所有的邊的容量都是1,最後做網路流,如果最大流量等於k就可行,否則不可行。

下面是**:

#include#include#include#includeusing namespace std;

const int maxn=50010;

const int inf=1000000000;

int n,m,b;

struct node

edge[500010];

int head[maxn],pre[maxn],gap[maxn],dis[maxn],cur[maxn];

int num,nn;

void init()

void add_edge(int x,int y,int f)

void add_adjcant(int x,int y)

if(x1)

if(y0&&dis[u]==dis[v]+1)

aug=inf;

}break;}}

if(flag)continue;

int mindis=nn;

for(int j=head[u];j!=-1;j=edge[j].next)

}if((--gap[dis[u]])==0)break;

gap[dis[u]=mindis+1]++;

u=pre[u];

}return flow;

}int main()

}for(int i=1;i<=m;i++)

for(int i=2;i

網路流最小割(拆點)

具體思路 網路流的最小割等於玩網路流的最大流量,注意拆點,以及拆點後邊連的時候是拆點後第二個點連向目的地。ac include include include includeusing namespace std const int maxn 100010 點數的最大值 const int maxm...

網路流 拆點 最小割點集

byteland 國 收到了一條匿名舉報,其中說當地黑幫老大正計畫一次從港口到郊區倉庫的運輸。知道運輸的時間並且知道運輸需要用到國家的高速公路網。高速公路網包含雙向的高速公路段,每個路段直接連著兩個不同的收費站。乙個收費站可能與很多其他的收費站相連。汽車只能通過收費站進入或離開高速公路網。據所知,黑...

Dining POJ 3281 (拆點網路流)

題意 n 頭牛,f 種食物 食物只有乙份 d 種飲料 飲料只有乙份 然後每頭牛喜歡哪些食物,哪些飲料。每頭牛只有喝了自己喜歡喝的飲料,吃了自己喜歡吃的食物才會開心 問最多能讓多少頭牛開心。思路 1 最大流模板,新增 源點 和 匯點 2 但是存在問題,每個牛可能會吃多種食物,喝多種飲料,怎麼能這種情況...