有上下界的網路流

2021-07-10 18:44:29 字數 1884 閱讀 2845

有上下界的網路流請戳這裡

**hzwer.com

首先s向每天連[0,day]的邊,每一天與拍照的妹子連[l,r]的邊,每個女孩和匯連[g,oo]的邊

對於有源和匯的上下界網路流,只要t到s連一條[0,inf]的邊,那麼原圖成為乙個無源點匯點的迴圈流圖,那麼新建ss和tt,向每個點連邊(即每一點的入流為正則源向其連,否則向匯連),求ss到tt的最大流判斷滿流

判斷有解之後求最大流再做一次s到t的最大流

同時要去掉原來t到s的[0,inf]的邊

其實我是來存**的..=-=..

[bzoj 2502]清理雪道

#include 

#define maxn 110

using

namespace

std;

int n;

const

int inf = 0x7fffffff;

struct edgeedge[100010];

int h[maxn], cnt = 1;

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

int s, t, ss, tt;

int ans;

void restore()

}queue

q;int d[maxn];

bool bfs()

}return d[t] != -1;

}int dfs(int x, int a)

}if(!used)d[x] = -1;

return used;

}int dinic()

int deg[maxn];

int main()

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

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

add(ss, i, inf), add(i, tt, inf);

add(tt, ss, inf);

ans = dinic();

restore();

add(s, tt, inf);

add(ss, t, inf);

ans -= dinic();

cout

<< ans << endl;

return

0;}

[bzoj 2055]80人環遊世界

#include 

#define maxn 300

#define in(u) u

#define out(u) u+n

using

namespace

std;

const

int inf = 0x7ffffff;

int n, m;

int s, t, ss, tt;

struct edgeedge[100010];

int h[maxn], cnt = 1;

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

int ans;

queue

q;int dis[maxn], pre[maxn], vis[maxn];

bool spfa()

}vis[u] = false;

}return dis[t] < inf;

}void end()

}int solve()

int main()

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

}add(tt, ss, m, 0);

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

return

0;}

有上下界網路流

前言 下面寫得只是一些十分基礎的東西,是給我以後自己看的,想要徹底弄明白這個內容,推薦去看liu runda。注 為了方便,下面所有的 x,y,l,r 都表示一條從x連向y,流量下界為l,流量上界為r的邊。問題簡述 給出乙個有向圖,每條邊有流量上下界,沒有源點和匯點,要求找到一種流的方法,使得每個點...

有上下界的網路流

有上下界的網路流 這幾天看了周源的 一種簡易的方法求解流量有上下界的網路中網路流問題 並完成了 sgu 194 zoj 2314 reactor cooling,sgu 176 flow construction 和hoj 2135 poj 2396 budget三道題。作為周源文章中提到的求解上下...

有上下界的網路流

1.無匯源有上下界最大流 以前寫的最大流預設的下界為0,而這裡的下界卻不為0,所以我們要進行再構造讓每條邊的下界為0,這樣做是為了方便處理。對於每根管子有乙個上界容量up和乙個下界容量low,我們讓這根管子的容量下界變為0,上界為up low。可是這樣做了的話流量就不守恆了,為了再次滿足流量守恆,即...