zoukankan      html  css  js  c++  java
  • 网络流最大流算法参考程序

    #include<stdio.h>
    #include<stdlib.h>
    int c[101][101],f[101][101],p[101],m,n,d[10000],pre[101];
    int main(){
        int i,j,k=1,top,last;
        scanf("%d%d",&n,&m);
        int x,y,z;
        for(i=1;i<=m;i++){
            scanf("%d%d%d",&x,&y,&z);                  
            c[x][y]=z;c[y][x]=z;
        }
        while(k){
            k=0;
            top=0;last=1;d[1]=1;
            for(i=1;i<=n;i++)p[i]=0;
            p[1]=1;
            while(top<last){
                top++;
                x=d[top];
                for(i=2;i<=n;i++)   
                    if(!p[i] && (c[x][i]>f[x][i] || f[i][x]>0)){
                        d[++last]=i;
                        p[i]=1;
                        pre[i]=x;         
                        if(i==n){k=1;break;}
                    }       
                if(k==1)break;
            }
            if(k==0)break;
            int min=10000000;
            x=n;
            while(x!=1){
                if(c[pre[x]][x]>f[pre[x]][x]&& c[pre[x]][x]-f[pre[x]][x]<min)
                    min=c[pre[x]][x]-f[pre[x]][x];            
                else if(f[x][pre[x]]>0 && f[x][pre[x]]<min)
                    min=f[x][pre[x]];
                x=pre[x];
            }
            x=n;
            while(x!=1){
                if(c[pre[x]][x]>f[pre[x]][x])
                    f[pre[x]][x]+=min;            
                else if(f[x][pre[x]]>0)
                    f[x][pre[x]]-=min;
                x=pre[x];
            }                     
        }
        int max=0;
        for(i=2;i<=n;i++)
            max+=f[1][i];
        printf("%d
    ",max);    
        system("pause");
        return 0;    
    }
    


  • 相关阅读:
    css基础面试题
    hack-checkbox
    装饰性属性
    【CF809E】Surprise me!
    [SCOI2012]奇怪的游戏
    [HAOI2018]奇怪的背包
    CF1139D Steps to One
    [CTSC2018]假面
    写在省选前
    [SDOI2015]寻宝游戏
  • 原文地址:https://www.cnblogs.com/cnyali/p/4163910.html
Copyright © 2011-2022 走看看