zoukankan      html  css  js  c++  java
  • poj 1459

    一道简单的网络流;

    这是一道多源多汇的模型;

    解决的这样的模型的一个方法是:建立一个超级源和一个超级汇,然后就成为了一个模板题了!

    代码:

    #include<cstdio>
    #include<cstring>
    #include<queue>
    #define inf 9999999999
    #define maxn 105
    using namespace std;
    
    int map[maxn][maxn],level[maxn],m,n;
    
    bool bfs()
    {
        queue<int>q;
        memset(level,0,sizeof level);
        q.push(0);
        level[0]=1;
        while(!q.empty())
        {
            int now=q.front();
            q.pop();
            for(int i=0;i<=m+1;i++)
            {
                if(!level[i]&&map[now][i]>0)
                {
                    level[i]=level[now]+1;
                    q.push(i);
                }
            }
        }
        return level[m+1]!=0;
    }
    
    int dfs(int s,int cp)
    {
        int tmp=cp,t;
        if(s==m+1) return cp;
        for(int i=0;i<=(m+1)&&tmp;i++)
        {
            if(level[i]==level[s]+1&&map[s][i]>0)
            {
                t=dfs(i,min(tmp,map[s][i]));
                map[s][i]-=t;
                map[i][s]+=t;
                tmp-=t;
            }
        }
        return cp-tmp;
    }
    
    int main()
    {
        int ns,nc,a,b,c;
        char s[20];
        while(scanf("%d%d%d%d",&m,&ns,&nc,&n)!=EOF)
        {
            memset(map,0,sizeof map);
            for(int i=0;i<n;i++)
            {
                scanf("%s",&s);
                sscanf(s,"(%d,%d)%d",&a,&b,&c);
                a++,b++;
                map[a][b]+=c;
            }
            for(int i=0;i<ns;i++)
            {
                scanf("%s",&s);
                sscanf(s,"(%d)%d",&a,&b);
                a++;
                map[0][a]=b;
            }
            for(int i=0;i<nc;i++)
            {
                scanf("%s",&s);
                sscanf(s,"(%d)%d",&a,&b);
                a++;
                map[a][m+1]=b;
            }
            int ans=0,f;
            while(bfs())
            {
                while(f=dfs(0,inf))
                    ans+=f;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Spring HandlerInterceptor的使用
    JAVE 视音频转码
    习课的redis配置记录
    原 HttpClient 4.3超时设置
    IPMI
    Tomcat redis 配置
    JVM route
    linux swap空间的swappiness=0
    【SSH三大框架】Hibernate基础第五篇:利用Hibernate完毕简单的CRUD操作
    英特尔高速存储技术
  • 原文地址:https://www.cnblogs.com/yours1103/p/3317730.html
Copyright © 2011-2022 走看看