1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <queue>
 5 using namespace std;
 6 const int INF = 0x3f3f3f3f;
 7 const int N = 10005;
 8 const int M = 100005;
 9 struct type{
10     int u, v, w, next;
11 }edge[M << 1];
12 int head[N], cnt;
13 int dep[N], cur[N];
14 int n, m, s, t, d;
15 void add(int x, int y, int z){
16     edge[cnt].u = x;
17     edge[cnt].v = y;
18     edge[cnt].w = z;
19     edge[cnt].next = head[x];
20     head[x] = cnt;
21     cnt++;
22 }
23 bool bfs(){
24     int fro = 0;
25     queue<int> q;
26     q.push(s);
27     for(int i = 1; i <= n; i++) dep[i] = 0;
28     dep[s] = 1;//important!!!!!
29     while(!q.empty()){
30         fro = q.front(); q.pop();
31         for(int i = head[fro]; i != -1; i = edge[i].next){
32             int vv = edge[i].v;
33             if(!dep[vv] && edge[i].w > 0){
34                 dep[vv] = dep[fro] + 1;
35                 q.push(vv);
36             }
37         }
38     }
39     return dep[t] ? 1 : 0;
40 }
41 int dfs(int x, int rest){
42     if(x == t || !rest) return rest;
43     for(int& i = cur[x]; i != -1; i = edge[i].next){//当前弧优化 
44         int vv = edge[i].v, ww = edge[i].w;
45         if(dep[vv] != dep[x] + 1) continue;
46         d = dfs(vv, min(rest, ww));
47         if(d > 0){
48             edge[i].w -= d;
49             edge[i ^ 1].w += d;
50             return d;
51         }
52     }
53     return 0;
54 }
55 int dinic(){
56     int ans = 0;
57     while(bfs()){
58         for(int i = 1; i <= n; i++) cur[i] = head[i];//当前弧优化
59         if(d = dfs(s, INF)){
60             ans += d;
61         }
62     }
63     return ans;
64 }
65 int main() {
66     int x, y, z;
67     scanf("%d%d%d%d", &n, &m, &s, &t);
68     for(int i = 1; i <= n; i++) head[i] = -1;
69     for(int i = 1; i <= m; i++){
70         scanf("%d%d%d", &x, &y, &z);
71         add(x, y, z);
72         add(y, x, 0);
73     }
74     printf("%d", dinic());
75     return 0;
76 }
最大流dinic

相关文章:

  • 2021-06-18
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-25
  • 2021-10-16
  • 2021-12-05
相关资源
相似解决方案