• Dinic 算法


     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 const int N (1e5+5), M(1e5+5);
     5 
     6 int head[N];
     7 struct Edge{
     8     /*
     9     r: residual capacity
    10     */
    11     int v, r, nt;
    12 }E[M];
    13 int tail;
    14 void add_edge(int u, int v, int c){
    15     E[tail]={v, c, head[u]}, head[u]=tail++;
    16     E[tail]={u, 0, head[v]}, head[v]=tail++;
    17 }
    18 
    19 int level[N];
    20 void bfs(int s){
    21     memset(level, -1, sizeof(level));
    22     queue<int> que;
    23     level[s]=0;
    24     que.push(s);
    25     for(int u; !que.empty(); ){
    26         u=que.front(), que.pop();
    27         for(int i=head[u]; ~i; i=E[i].nt){
    28             int &v=E[i].v;
    29             if(E[i].r>0 && level[v]<0){
    30                 level[v]=level[u]+1;
    31                 que.push(v);
    32             }
    33         }
    34     }
    35 }
    36 
    37 int iter[N];
    38 int dfs(int u, int t, int f){
    39     /*
    40     t: terminal (sink)
    41     */
    42     if(u==t) return f;
    43     //for(int &i=iter[u]; i!=-1; i++){
    44     for(int &i=iter[u]; i!=-1; i=E[i].nt){
    45         int &v=E[i].v, &r=E[i].r;
    46         if(r>0 && level[u]<level[v]){
    47             int d=dfs(v, t, min(f, r));
    48             if(d>0){
    49                 r-=d;
    50                 E[i^1].r+=d;
    51                 return d;
    52             }
    53         }
    54     }
    55     return 0;
    56 }
    57 
    58 int dinic(int s, int t){
    59     const int INF=1<<30;
    60     for(int flow=0;;){
    61         bfs(s);
    62         if(level[t]<0) return flow;
    63         memcpy(iter, head, sizeof(iter));
    64         for(int f; f=dfs(s, t, INF); flow+=f);
    65     } 
    66 }
    67 
    68 void init(){
    69     tail=0;
    70     memset(head, -1, sizeof(head));
    71 }    
  • 相关阅读:
    关于APP接口设计
    http协议详解-摘抄
    lnmp启动脚本
    MySQL数据库优化总结
    91、sendToTarget与sendMessage
    90、 Android UI模板设计
    Android Intent Action大汇总(转载)
    89、Android EditText 悬浮停靠
    88、android 插件开发教程(转载)
    Android Studio实用插件使用
  • 原文地址:https://www.cnblogs.com/Patt/p/5014463.html
Copyright © 2020-2023  润新知