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自己打 :(

  • 相关阅读:
    观众查询界面
    排球积分程序
    产品会议
    本周工作量及进度统计
    排球积分规则
    我与计算机
    排球记分员
    怎样成为一个高手观后感
    第十八周冲刺
    十六周
  • 原文地址:https://www.cnblogs.com/PinkRabbit/p/7115407.html
Copyright © 2011-2022 走看看