zoukankan      html  css  js  c++  java
  • 【最大流Dinic模板】HDU1532&POJ1273-Drainage Ditches(16/3/6更正)

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstdlib>
     4 #include<cstring>
     5 #include<algorithm>
     6 #include<cmath>
     7 #include<vector>
     8 using namespace std;
     9 const int MAXN=1100;
    10 const int INF=0x7fffffff;
    11 int n,m;//n:edges,m:points 
    12 struct node
    13 {
    14        int to,pos,cap;
    15 };
    16 vector<node> E[MAXN];
    17 int vis[MAXN];
    18 
    19 void addedge(int u,int v,int w)
    20 {
    21      node x;
    22      x.to=v; x.pos=E[v].size(); x.cap=w;
    23      E[u].push_back(x);
    24      x.to=u; x.pos=E[u].size()-1; x.cap=0;
    25      E[v].push_back(x);
    26 }
    27 
    28 int dfs(int s,int t,int f)
    29 {
    30     int ret=0;
    31     if (s==t) return f;
    32     vis[s]=1;//不要忘记这里要设置为访问过 
    33     for (int i=0;i<E[s].size();i++)
    34     {
    35         node &tmp=E[s][i]; 
    36         if (vis[tmp.to]==0 && tmp.cap>0)
    37         {
    38             int delta=dfs(tmp.to,t,min(tmp.cap,f));
    39             if (delta>0)
    40             {
    41                 ret+=delta;
    42                tmp.cap-=delta;
    43                E[tmp.to][tmp.pos].cap+=delta;
    44                f-=delta; 
    45             }
    46         }
    47     }
    48     return ret;
    49 }
    50 
    51 int maxflow(int u,int v)
    52 {
    53     int flow=0;
    54     for (;;)
    55     {
    56         memset(vis,0,sizeof(vis));
    57         int f=dfs(u,v,INF);
    58         if (f==0) return flow;
    59            else flow+=f; 
    60     }
    61 }
    62 
    63 int main()
    64 {
    65     while(~scanf("%d%d",&n,&m))
    66     {
    67           memset(E,0,sizeof(E));
    68           for (int i=0;i<n;i++)
    69           {
    70               int x,y,z;
    71               scanf("%d%d%d",&x,&y,&z);
    72               addedge(x,y,z);
    73           }
    74           cout<<maxflow(1,m)<<endl;
    75     }
    76     return 0;
    77 }

    2016/3/6更正:建立一个ret,每次递归不是找到一条增广路径就返回的..之前写的和FordFulkerson效率超不多orz

  • 相关阅读:
    MyBatis与spring面试题-转载
    122. 买卖股票的最佳时机 II(贪心策略)
    121. 买卖股票的最佳时机
    120. 三角形最小路径和
    236. 二叉树的最近公共祖先(快手面试)
    b,b+树区别
    119. 杨辉三角 II
    118. 杨辉三角
    检查型异常(Checked Exception)与非检查型异常(Unchecked Exception)
    Redis
  • 原文地址:https://www.cnblogs.com/iiyiyi/p/5153504.html
Copyright © 2011-2022 走看看