• 网络流之最大流Dinic算法模版


     1 /*
     2 网络流之最大流Dinic算法模版
     3  */
     4 #include <cstring>
     5 #include <cstdio>
     6 #include <queue>
     7 using namespace std;
     8 const int maxn = 205;
     9 const int inf = 0x3f3f3f3f;
    10 struct
    11 {
    12     int c,f;//c为边的容量,f为边的容量
    13 }edge[maxn][maxn];
    14 int dis[maxn];
    15 int v,e;
    16 bool bfs()//利用bfs进行分层处理,当汇点无法分层时得到最大流
    17 {
    18     memset(dis,0,sizeof dis);
    19     queue<int> q;
    20     q.push(1);
    21     dis[1] = 1;
    22     while(!q.empty())
    23     {
    24         int u = q.front(); q.pop();
    25         for(int i = 1; i <= v; ++i)
    26             if(!dis[i] && edge[u][i].c > edge[u][i].f)
    27             {dis[i] = dis[u] + 1;q.push(i);}
    28     }
    29     return dis[v] != 0;
    30 }
    31 int dfs(int u,int c)//增广
    32 {
    33     if(u == v) return c;
    34     int temp = c;
    35     for(int i = 1; i <= v && temp; ++i)
    36     {
    37         if(dis[i] != dis[u] + 1 || edge[u][i].c <= edge[u][i].f) continue;
    38         int t = dfs(i,min(temp,edge[u][i].c - edge[u][i].f));
    39         edge[u][i].f += t; edge[i][u].f -= t; temp -= t;
    40     }
    41     return c - temp;
    42 }
    43 int dinic()
    44 {
    45     int ans = 0;
    46     while(bfs())
    47         while(int t = dfs(1,inf))
    48             ans += t;
    49     return ans;
    50 }
    51 int main()
    52 {
    53     while(~scanf("%d%d",&e,&v))
    54     {
    55         memset(edge,0,sizeof edge);
    56         while(e--)
    57         {
    58             int x,y,z;
    59             scanf("%d%d%d",&x,&y,&z);
    60             edge[x][y].c += z;
    61         }
    62         int ans = dinic();
    63         printf("%d
    ",ans);
    64     }
    65     return 0;
    66 }
  • 相关阅读:
    关于值传递和引用传递
    单例设计模式(创建型模式)
    逻辑分页和物理分页
    java基本数据类型
    Keepalived笔记
    lvs,HAProxy,nginx简单笔记
    限流, 熔断,降级笔记
    redis事务之watch
    Redis-Sentinel
    正式入驻博客园
  • 原文地址:https://www.cnblogs.com/qq188380780/p/7367850.html
Copyright © 2020-2023  润新知