上下界 最大流

2021-06-26 23:56:37 字數 1988 閱讀 7495

做法:

1、有源彙編成無源匯 (t-s,  0, infmax)

2、ss tt 連線個點  intout>0(ss-i,0,inout[i])  inout<0 (i, tt, 0, -inout[i])

3、然後跑一片最大流  max=dinic(ss,tt)  之後的這步很重要 head[ss]=head[tt]=-1//刪除ss 和 tt

4、if( max == sum )  成立有解 不成立無解 sum=所有ss流出的流量總和

5、在跑一邊最大流  maxflow=dinic(s,t)  最大流 maxflow  各個邊的流量輸出見**

zoj 3229

/** this code is made by linmeichen

* problem:

* type of problem: 有源匯上下界最大流

* thinking:

* feeling:

*/#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef long long lld;

typedef unsigned int ud;

#define inf_max 0x3f3f3f3f

#define eatline() char chch;while((chch=getchar())!='\n')continue;

#define memsetmax(a) memset(a,0x3f,sizeof a)

#define memsetzero(a) memset(a,0,sizeof a)

#define memsetmin(a) memset(a,-1,sizeof a)

#define memsetfalse(a) memsetzero(a)

#define pq priority_queue

#define q queue

#define maxn 1400

#define maxm 400008

struct edge

e[maxm<<2];

int k, cnt;

int head[maxn], h[maxn];

int level[maxn], stack[maxn];

int inout[maxn], low[maxn];

int g[maxn], d[maxn];

bool bfs(int s, int t)}}

return false;

}int dinic(int s, int t)

}for (int i = 0; i < top; i++)

top = flag;

maxflow += minflow;

u = e[stack[top] ^ 1].v;

}for (int i = h[u]; i != -1; i = h[u] = e[i].next)

if (h[u] != -1)

else}}

return maxflow;

}void add_edge(int u, int v, int f1, int f2 = 0)

int main()

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

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

int sum = 0;

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

add_edge(t, s, inf_max);

if (sum!=dinic(ss, tt))

printf("-1\n");

else

}puts("");

}return 0;

}

有源匯上下界最大流

a 有源匯有上下界最大流 libreoj 116 給定乙個包含 n 個點 m 條邊的有向圖,每條邊都有乙個流量下界和流量上界。給定源點 s和匯點 t,求源點到匯點的最大流。輸入格式 第一行包含四個整數 n,m,s,t。接下來 m行,每行包含四個整數 a,b,c,d 表示點 a 和 b 之間存在一條有...

有源匯上下界最大流

題目描述 這是一道模板題。n n n 個點,m m m 條邊,每條邊 e e e 有乙個流量下界 lower e text e lower e 和流量上界 upper e text e upper e 給定源點 s s s 與匯點 t t t,求源點到匯點的最大流。輸入格式 第一行兩個正整數 n n...

有源匯的上下界最大流

主要由兩種做法 1 二分乙個流量,然後跑乙個最大流,看有沒有能滿足的可行流,能滿足的流量的最大值就是答案了,複雜度 單次網路流複雜度 log最大流量 反之我是不想寫這個的,感覺寫起很麻煩,而且二分的邊界也不好調 看方法二就可以了 2 首先無論如何我們都需要先跑一次可行流的 不然連能不能流通都不知道 ...