Cod sursa(job #566446)

Utilizator bacilaBacila Emilian bacila Data 28 martie 2011 23:41:40
Problema Flux maxim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include<fstream>
#include<iostream>
#include<vector>
using namespace std;
int k,coada[1005],tata[1005],n,m,cmin,a[1003][1003],fl[1003][1003],flux;
vector<int> v[1005];
int bf()
{ int i,j;
    coada[0]=1; k=1;
  for(i=2;i<=n;i++)  
    tata[i]=0;
  for(i=0;i<k;i++)
    if(coada[i]!=n)
    for(j=0;j<v[coada[i]].size();j++)
    if(!tata[v[coada[i]][j]]&&a[coada[i]][v[coada[i]][j]]!=fl[coada[i]][v[coada[i]][j]])
    {tata[v[coada[i]][j]]=coada[i];
    coada[k++]=v[coada[i]][j];}

return tata[n];}
int main()
{int i,x,y,c;
    ifstream f("maxflow.in");
    f>>n>>m;
    for(i=1;i<=m;i++)
    {f>>x>>y>>c;
    v[x].push_back(y);
    v[y].push_back(x);
    a[x][y]=c;}
    tata[1]=-1;
    for(flux=0;bf();)
    for(i=0;i<v[n].size();i++)
    if(tata[v[n][i]]&&a[v[n][i]][n]!=fl[v[n][i]][n])
    {cmin=1000000000;
     tata[n]=v[n][i];    
    x=n;
    while(x!=1)                        
    {if(cmin>a[tata[x]][x]-fl[tata[x]][x]) cmin=a[tata[x]][x]-fl[tata[x]][x];
    
    x=tata[x]; }
    if(!cmin) continue;
    x=n;
    while(x!=1)                       
    {fl[tata[x]][x]+=cmin;
    fl[x][tata[x]]-=cmin;
    x=tata[x];}
    flux+=cmin;
    
    }
    ofstream g("maxflow.out");
    g<<flux;
    f.close(); g.close();
    return 0;
}