Cod sursa(job #2018492)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 5 septembrie 2017 01:13:52
Problema Flux maxim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.39 kb
#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
struct mu{
int ve,cost;
};
vector<mu>v[1001];
queue <int>q;
int muc[1001][1001],m,n,viz[1001];
int bfs()
{int flw=0,vf,i,ok=0;
q.push(1);
for(i=2;i<=n;i++)viz[i]=0;
viz[1]=1;
while(!q.empty()&&!viz[n])
{
    vf=q.front();
    q.pop();
    for(i=1;i<=n;i++)
    {
        if(muc[vf][i]!=0&&viz[i]==0)
        {   if(i==n)
        {viz[n]=vf;

    int t=n,mi=9135136;
    while(t!=1)
    {
        if(mi>muc[viz[t]][t])mi=muc[viz[t]][t];
        t=viz[t];
    }
    t=n;
    while(t!=1)
    {
        muc[viz[t]][t]-=mi;
        muc[t][viz[t]]=mi;
        t=viz[t];
    }

flw+=mi;viz[n]=0;
        } else {
            q.push(i);
            viz[i]=vf;
                }

        }
    }
}

    return flw;
}






int main()
{freopen("maxflow.in","r",stdin);
freopen("maxflow.out","w",stdout);
     int i,a,b,c,flow=0;
     scanf("%d%d",&n,&m);
     for(i=0;i<m;i++)
     {
         scanf("%d%d%d",&a,&b,&c);
         mu t;
         t.ve=b;
         t.cost=c;
         v[a].push_back(t);
        // t.ve=a;
         //t.cost=0;
         //v[b].push_back(t);
         muc[a][b]=c;
     }
     a=0;
     a=bfs();
     flow+=a;
     while(a)
     {while(!q.empty())q.pop();
         a=bfs();
         flow+=a;
     }
     printf("%d",flow);



    return 0;
}