zoukankan      html  css  js  c++  java
  • 【算法学习】网络流模板……

    网络流最大流(最小割)Dinic模板……

    1 const int INF=99999999;
    2 const int Maxn=;
    3 const int Maxm=;
    4 inline int Min(int p,int q){return p<q?p:q;}
    5 int n,m,h[Maxn+5],to[Maxm*2+5],cap[Maxm*2+5],nxt[Maxm*2+5],tot=1,Sum=0,que[Maxn+5],l,r,lv[Maxn+5],iter[Maxn+5];
    6 inline void ins(int x,int y,int c){nxt[++tot]=h[x];to[tot]=y;cap[tot]=c;h[x]=tot;}
    7 inline void INS(int x,int y,int c){ins(x,y,c);ins(y,x,0);}
     1 inline bool lvl() {
     2     memset(lv,0,sizeof lv);
     3     int u;
     4     l=r=1; que[1]=0; lv[0]=1;
     5     while(l<=r) {
     6         u=que[l++];
     7         eF(i,u) if(!lv[to[i]]&&cap[i]) {
     8             lv[to[i]]=lv[u]+1;
     9             que[++r]=to[i];
    10         }
    11     }
    12     return lv[T];
    13 }
    14 int flow(int u,int f) {
    15     if(u==T) return f;
    16     int d,sum=0;
    17     for(int&i=iter[u];i;i=nxt[i]) if(lv[to[i]]==lv[u]+1&&cap[i]) {
    18         d=flow(to[i],Min(f,cap[i]));
    19         sum+=d; f-=d;
    20         cap[i]-=d; cap[i^1]+=d;
    21         if(!f) return sum;
    22     }
    23     return sum;
    24 }
    25 int Dinic() {
    26     int ans=0;
    27     while(lvl()) {
    28         for(int i=0;i<=T;++i) iter[i]=h[i];
    29         ans+=flow(0,INF);
    30     }
    31     return ans;
    32 }
    33 int main() {
    34     init();
    35     printf("%d",Sum-Dinic());
    36 }

    没了……

    init自己打 :(

  • 相关阅读:
    java内部类
    navicat使用教程-PJ
    提交代码时的注意事项
    多线程技术
    Apache POI使用详解
    网站链接收藏夹
    MySQL优化
    Oracle创建用户、角色、授权、建表
    oracle 安装提示未找到文件安装
    Json对象与Json字符串的转化、JSON字符串与Java对象的转换
  • 原文地址:https://www.cnblogs.com/PinkRabbit/p/7115407.html
Copyright © 2011-2022 走看看