Cod sursa(job #2075822)

Utilizator sebi110Ciobanu Sebastian sebi110 Data 25 noiembrie 2017 18:11:19
Problema Flux maxim Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <fstream>
#include <vector>
#include <queue>
#include <string.h>
#define MAX 1000000000
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
vector <int> v[1001];
int t[1001],c[1001][1001],f[1001][1001];
bool viz[1001];
void getAP(int x)//BFS prin care se obtine drumul de la x la n
{
    int i,vec;
    queue <int> q;
    q.push(x);
    viz[x]=1;
    while(!q.empty())
    {
        x=q.front();q.pop();
        for(i=0;i<v[x].size();i++)
        {
          vec=v[x][i];
          if(viz[vec]==0 && c[x][vec]-f[x][vec]>0)
          {
                viz[vec]=1;
                t[vec]=x;
                q.push(vec);
          }
        }
    }
}
int main()
{
    int n,m,i,x,y,f1=0;
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        fin>>c[x][y];
        v[x].push_back(y);
        v[y].push_back(x);
    }
    while(1)
    {
        memset(viz,0,sizeof(viz));
        memset(t,-1,sizeof(t));
        getAP(1);
        if(t[n]==-1)
            break;
        int maxf=MAX;
        i=n;
        while(t[i]!=-1)
        {
            maxf=min(maxf,c[t[i]][i]-f[t[i]][i]);
            i=t[i];
        }
        i=n;
        while(t[i]!=-1)
        {
            f[t[i]][i]+=maxf;
            f[i][t[i]]-=maxf;
            i=t[i];
        }
        f1+=maxf;
    }
    fout<<f1;
    return 0;
}