Pagini recente » Cod sursa (job #2008874) | Cod sursa (job #2840397) | Cod sursa (job #372944) | Cod sursa (job #1747814) | Cod sursa (job #2840396)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int MAX=1005;
const int INF=1e9;
int n,m,a,b,c,t[MAX],viz[MAX],flux,fmax,cap[MAX][MAX],nod;
bool ok;
vector < int > v[MAX];
bool BFS()
{
queue < int > q;
for(int i=1;i<=n;i++)
viz[i]=t[i]=0;
q.push(1);
viz[1]=1;
ok=0;
while(!q.empty() && !ok)
{
nod=q.front();
q.pop();
if(nod==n)
continue;
for(auto vec : v[nod])
if(!viz[vec] && cap[nod][vec]>0)
{
viz[vec]=1;
q.push(vec);
t[vec]=nod;
}
}
return viz[n];
}
int main()
{
fin >> n >> m;
while(m--)
{
fin >> a >> b >> c;
v[a].push_back(b);
v[b].push_back(a);
cap[a][b]=c;
}
while(BFS())
for(auto vec : v[n])
{
flux=INF;
nod=vec;
while(nod!=1)
{
if(cap[t[nod]][nod]<flux)
flux=cap[t[nod]][nod];
nod=t[nod];
}
nod=vec;
while(nod!=1)
{
cap[nod][t[nod]]+=flux;
cap[t[nod]][nod]-=flux;
nod=t[nod];
}
fmax+=flux;
}
fout << fmax;
return 0;
}