zoukankan      html  css  js  c++  java
  • Dinic 模板

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <queue>
     5 
     6 using namespace std;
     7 const int INF=2147483647;
     8 const int maxn=210,maxm=410;
     9 int cnt,fir[maxn],nxt[maxm],cap[maxm],to[maxm],dis[maxn];
    10 
    11 void addedge(int a,int b,int c)
    12 {
    13     nxt[++cnt]=fir[a];
    14     to[cnt]=b;
    15     cap[cnt]=c;
    16     fir[a]=cnt;
    17 }
    18 
    19 bool BFS(int S,int T)
    20 {
    21     memset(dis,0,sizeof(dis));
    22     dis[S]=1;
    23     queue<int>q;q.push(S);
    24     while(!q.empty())
    25     {
    26         int node=q.front();q.pop();
    27         for(int i=fir[node];i;i=nxt[i])
    28         {
    29             if(!cap[i]||dis[to[i]])continue;
    30             dis[to[i]]=dis[node]+1;
    31             q.push(to[i]);
    32         }
    33     }
    34     return dis[T];
    35 }
    36 
    37 int DFS(int node,int T,int f)
    38 {
    39     if(node==T)return f; 
    40     int d,ret=0;
    41     for(int i=fir[node];i;i=nxt[i])
    42     {
    43         if(!cap[i]||dis[to[i]]!=dis[node]+1)continue;
    44         if(!f)break;
    45         d=DFS(to[i],T,min(cap[i],f));
    46         if(d){
    47             ret+=d;
    48             cap[i]-=d;
    49             cap[i^1]+=d;
    50             f-=d;
    51         }
    52     }
    53     return ret;
    54 }
    55 
    56 int Dinic(int S,int T)
    57 {
    58     int ret=0,d;
    59     while(BFS(S,T)&&(d=DFS(S,T,INF)))
    60         ret+=d;
    61     return ret;    
    62 }
    63 
    64 void Init()
    65 {
    66     memset(fir,0,sizeof(fir));
    67     cnt=1;
    68 }
    69 int main()
    70 {
    71     int n,m;
    72     while(~scanf("%d%d",&m,&n))
    73     {
    74         Init();
    75         for(int i=1;i<=m;i++){
    76             int x,y,c;
    77             scanf("%d%d%d",&x,&y,&c);
    78             addedge(x,y,c);
    79             addedge(y,x,0);
    80         }
    81         printf("%d
    ",Dinic(1,n));
    82     }
    83 
    84     return 0;
    85 }
    尽最大的努力,做最好的自己!
  • 相关阅读:
    Android零碎知识之Style and Theme
    Java 线程池(一):开篇及Executor整体框架介绍
    ADB命令笔记本
    volatile变量理解 via《Java并发编程实战》
    Java NIO
    乱七八糟(一)
    Android事件分发机制
    AndroidStudio下的依赖管理
    shell--填过的坑
    兼容类问题
  • 原文地址:https://www.cnblogs.com/TenderRun/p/5221902.html
Copyright © 2011-2022 走看看