Cod sursa(job #1937295)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 23 martie 2017 21:01:15
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <bits/stdc++.h>
#define INF 1000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int n,m,j,k,d[1005][1005],t[1005],f[1005][1005],q,c,x,y,z,fmn,flow;
bool viz[1005];
vector<int>v[1005];
queue<int>C;
void BFS()
  {int i;
   memset(viz,0,sizeof(viz));
   q=1;
   C.push(1);
   viz[1]=1;
   while(!C.empty())
      {c=C.front();
       C.pop();
       for(i=0;i<v[c].size();i++)
          {if(viz[v[c][i]]==0&&d[c][v[c][i]]!=f[c][v[c][i]]){viz[v[c][i]]=1;
                                                             t[v[c][i]]=c;
                                                             if(v[c][i]==n)break;
                                                             else C.push(v[c][i]);
                                                            }
          }
      }
   while(!C.empty())
    C.pop();
  }
int main()
{int i;
 fin>>n>>m;
 for(i=1;i<=m;i++)
    {fin>>x>>y>>z;
     v[x].push_back(y);
     v[y].push_back(x);
     d[x][y]=z;
    }
 BFS();
 while(viz[n]==1)
    {q=n;fmn=INF;
     while(q!=1)
          {fmn=min(fmn,d[t[q]][q]-f[t[q]][q]);
           q=t[q];
          }
          flow+=fmn;
     q=n;
     while(q!=1)
          {f[t[q]][q]+=fmn;
           f[q][t[q]]-=fmn;
           q=t[q];
          }
          BFS();
    }

 fout<<flow;
}