Pagini recente » Cod sursa (job #1035143) | Cod sursa (job #1698940) | Cod sursa (job #1073757) | Cod sursa (job #2149165) | Cod sursa (job #2204927)
#include <fstream>
#include <vector>
#include <queue>
#include <iostream>
#define Nmax 1002
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
int F[Nmax][Nmax],C[Nmax][Nmax];
vector<int>muchii_graf[Nmax];
int n,m;
int FLUX;
void Read()
{
int x,y,cost,i;
fin>>n>>m;
for(i=0;i<m;++i)
{
fin>>x>>y>>cost;
muchii_graf[x].push_back(y);
muchii_graf[y].push_back(x);
C[x][y]=cost;
}
}
int Flux()
{
int x;
queue<int>c;
vector<int>t(n+1);
vector<int>viz(n+1);
c.push(1);
viz[1]=1;
while(!c.empty())
{
x=c.front();
c.pop();
for(int i:muchii_graf[x])
if(viz[i]==0)
{
if(F[x][i]==C[x][i])
continue;
t[i]=x;
c.push(i);
viz[i]=1;
}
}
int nrmin=200000000;
if(viz[n]==0)return 0;
for(int nod=n;nod!=1;nod=t[nod])
{
nrmin=min(nrmin,C[t[nod]][nod]-F[t[nod]][nod]);
}
for(int nod=n;nod!=1;nod=t[nod])
{
F[t[nod]][nod]+=nrmin;
F[nod][t[nod]]-=nrmin;
}
return nrmin;
}
int main()
{
Read();
int flux = 0;
while(true) {
int acum = Flux();
if (acum == 0)
break;
flux += acum;
}
fout<<flux<<"\n";
return 0;
}