題目描述
這是一道模板題。
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 n、m m m、s s s、t t t。
之後的 m m m 行,每行四個整數 s s s、t t t、lower \text lower、upper \text upper。
輸出格式
如果無解,輸出一行 please go home to sleep。
否則輸出最大流。
樣例樣例輸入
10 15 9 10
9 1 17 18
9 2 12 13
9 3 11 12
1 5 3 4
1 6 6 7
1 7 7 8
2 5 9 10
2 6 2 3
2 7 0 1
3 5 3 4
3 6 1 2
3 7 6 7
5 10 16 17
6 10 10 11
7 10 14 15
樣例輸出
43資料範圍與提示
**示例 :
using namespace std;#define ll long long
const int maxn = 1e5+5;
const int mod = 1e9+7;
const double eps = 1e-9;
const double pi = acos(-1.0);
const int inf = 0x3f3f3f3f;
int n, m, s, t;
struct node
e[maxn];
int head[maxn];
int cnt = 0;
void addedge(int u, int v, int w)
int dep[300];
int que[maxn];
bool bfs(int s, int t)}}
return dep[t];
}int aim;
int dfs(int u, int f1)
}if (!f) dep[u] = -2;
return f;
}int dinic(int s, int t)
return res;
}int main()
int flow = dinic(ss, tt);
int ans = e[1].flow;
//printf("ans = %d %d %d\n", ans, sum, e[1].flow);
if (flow != sum)
e[0].flow = 0, e[1].flow = 0;
ans += dinic(s, t);
printf("%d\n", ans);
return 0;
}
有源匯上下界最大流
a 有源匯有上下界最大流 libreoj 116 給定乙個包含 n 個點 m 條邊的有向圖,每條邊都有乙個流量下界和流量上界。給定源點 s和匯點 t,求源點到匯點的最大流。輸入格式 第一行包含四個整數 n,m,s,t。接下來 m行,每行包含四個整數 a,b,c,d 表示點 a 和 b 之間存在一條有...
有源匯的上下界最大流
主要由兩種做法 1 二分乙個流量,然後跑乙個最大流,看有沒有能滿足的可行流,能滿足的流量的最大值就是答案了,複雜度 單次網路流複雜度 log最大流量 反之我是不想寫這個的,感覺寫起很麻煩,而且二分的邊界也不好調 看方法二就可以了 2 首先無論如何我們都需要先跑一次可行流的 不然連能不能流通都不知道 ...
模板 有源匯上下界最大流
link 媽的 題解話不說清楚,不早說第二輪dinic的時候要去掉匯源邊,害得我白白地多花費了乙個小時。就離譜,這麼乙個網路流二次模板我寫了一下午。暈了。說回題目本身。建模是小事,主要是那個所謂的有源匯上下界最大流怎麼求。首先是無源匯上下界可行流怎麼搞?可以想到假如強制讓每一條邊流滿下界肯定是解題的...