• 洛谷 P2740 [USACO4.2]草地排水Drainage Ditches


     P2740 [USACO4.2]草地排水Drainage Ditches

    最大流模板

     1 #include<cstdio>
     2 #include<algorithm>
     3 using namespace std;
     4 #define maxn 10000
     5 #define inf 100000000
     6 int n,m,src,dec,cur[maxn],ans,lev[maxn],front[maxn],head,tail,que[maxn],tot;
     7 
     8 struct node{
     9     int to,next,cap;
    10 }e[maxn];
    11 inline void add(int u,int v,int w)
    12 {
    13     e[++tot].to=v; e[tot].next=front[u]; e[tot].cap=w; front[u]=tot;
    14     e[++tot].to=u; e[tot].next=front[v]; e[tot].cap=0; front[v]=tot;
    15 }
    16 
    17 inline bool bfs()
    18 {
    19     for(int i=src;i<=dec;i++) lev[i]=-1,cur[i]=front[i];
    20     head=tail=0; 
    21     que[tail++]=src; lev[src]=0;
    22     while(head<tail)
    23     {
    24         for(int i=front[que[head]];i;i=e[i].next)
    25             if(e[i].cap>0&&lev[e[i].to]==-1)
    26             {
    27                 lev[e[i].to]=lev[que[head]]+1; 
    28                 que[tail++]=e[i].to;
    29                 if(e[i].to==dec) return true;
    30             }
    31         head++;
    32     }
    33     return false;
    34 }
    35 inline int dinic(int u,int flow)
    36 {
    37     if(u==dec) return flow;
    38     int res=0,delta;
    39     for(int i=cur[u];i;i=e[i].next)
    40     {
    41         if(e[i].cap>0&&lev[e[i].to]>lev[u])
    42         {
    43             delta=dinic(e[i].to,min(e[i].cap,flow-res));
    44             if(delta)
    45             {
    46                 e[i].cap-=delta; e[i^1].cap+=delta;
    47                 res+=delta; if(res==flow) break; 
    48             }
    49         }
    50     }
    51     if(res!=flow) lev[u]=-1;
    52     return res;
    53 }
    54 
    55 int main()
    56 {
    57     scanf("%d%d",&n,&m);
    58     for(int i=1;i<=n;i++)
    59     {
    60         int u,v,w;
    61         scanf("%d%d%d",&u,&v,&w);
    62         add(u,v,w);
    63     }
    64     src=1; dec=m;
    65     while(bfs()) 
    66     ans+=dinic(src,inf);
    67     printf("%d
    ",ans);
    68     return 0;
    69 }
    View Code
  • 相关阅读:
    Django ——Timezone 处理
    orm
    MySql系列之初识
    python并发编程之IO模型
    并发编程之协程
    GIL解释锁及进程池和线程池
    线程的互斥锁、递归锁及信号量
    守护、互斥锁、IPC和生产者消费者模型
    并发编程基础(进程)
    网络编程
  • 原文地址:https://www.cnblogs.com/chen74123/p/7487280.html
Copyright © 2020-2023  润新知