网络流

http://acm.hust.edu.cn/vjudge/contest/view.action?cid=31317#overview

#include <iostream>
#include <queue>
#include <algorithm>
#include <string.h>
using namespace std;
const int msize=250;

int N,M;
int r[msize][msize];
int pre[msize];
bool vis[msize];

bool BFS(int s,int t)
{
    queue<int>que;
    memset(pre,-1,sizeof(pre));
    memset(vis,false,sizeof(vis));

    pre[s]=s;
    vis[s]=true;
    que.push(s);
    int p;
    while(!que.empty())
    {
        p=que.front();
        que.pop();
        for(int i=1;i<=M;i++)
        {
            if(r[p][i]>0&&!vis[i])
            {
                pre[i]=p;
                vis[i]=true;
                if(i==t)
                    return true;
                que.push(i);
            }
        }
    }
    return false;
}

int EK(int s,int t)
{
    int maxflow=0;
    int d;
    while(BFS(s,t))
    {
        d=0x7fffffff;
        for(int i=t;i!=s;i=pre[i])
            d=min(d,r[pre[i]][i]);
        for(int i=t;i!=s;i=pre[i])
        {
            r[pre[i]][i]-=d;
            r[i][pre[i]]+=d;
        }
        maxflow+=d;
    }
    return maxflow;
}

int main()
{
    while(cin>>N>>M)
    {
        memset(r,0,sizeof(r));
        int s,e,c;
        for(int i=0;i<N;i++)
        {
            cin>>s>>e>>c;
            r[s][e]+=c;
        }
        cout<<EK(1,M)<<endl;
    }
    return 0;
}
View Code
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
const int maxsize=110;
int n,np,nc,m;
int graph[maxsize][maxsize];
int pre[maxsize];
bool vis[maxsize];
int power;
char temp[20];
int u,v,z;
bool BFS(int s,int t)
{
    memset(pre,-1,sizeof(pre));
    memset(vis,false,sizeof(vis));
    queue<int>Q;
    Q.push(s);
    pre[s]=s;
    vis[s]=true;
    int p;
    while(!Q.empty())
    {
        p=Q.front();
        Q.pop();
        for(int i=0;i<=n+1;i++)
        {
            if(graph[p][i]>0&&!vis[i])
            {
                vis[i]=true;
                pre[i]=p;
                if(i==t)
                    return true;
                Q.push(i);
            }
        }
    }
    return false;
}
int EK(int s,int t)
{
    int maxflow=0;
    int delta;
    while(BFS(s,t))
    {
        delta=0x7fffffff;
        for(int i=t;i!=s;i=pre[i])
            delta=min(delta,graph[pre[i]][i]);
        for(int i=t;i!=s;i=pre[i])
        {
            graph[pre[i]][i]-=delta;
            graph[i][pre[i]]+=delta;
        }
        maxflow+=delta;
    }
    return maxflow;
}
int main()
{
    while(scanf("%d%d%d%d",&n,&np,&nc,&m)!=EOF)
    {
        memset(graph,0,sizeof(graph));
        power=0;
        for(int i=0;i<m;i++)
        {
            scanf("%s",temp);
            sscanf(temp,"(%d,%d)%d",&u,&v,&z);
            graph[u+1][v+1]+=z;
        }
        for(int i=0;i<np;i++)
        {
            scanf("%s",temp);
            sscanf(temp,"(%d)%d",&u,&z);
            graph[0][u+1]=z;
            power+=z;
        }
        for(int i=0;i<nc;i++)
        {
            scanf("%s",temp);
            sscanf(temp,"(%d)%d",&u,&z);
            graph[u+1][n+1]=z;
        }
        cout<<EK(0,n+1)<<endl;
    }
    return 0;
}
View Code
原文地址:https://www.cnblogs.com/whatthefy/p/3409264.html