Pagini recente » Cod sursa (job #797089) | Profil Dobricean_Ioan | Cod sursa (job #987485) | Cod sursa (job #1979792) | Cod sursa (job #1409971)
#include <bits/stdc++.h>
#define N 1005
#define pb emplace_back
#define oo 1<<30
using namespace std;
vector<int>v[N], q;
int tata[N], cap[N][N], fl[N][N], x, z, y, n, m, minflow, sol;
bool bf(int nod)
{
memset(tata, 0, sizeof(tata));
tata[1] = 1;
q.pb(1);
while(q.size())
{
nod = q.back();
q.pop_back();
if(nod == n)
continue;
for(auto it : v[nod])
if(!tata[it] && cap[nod][it] > fl[nod][it])
{
tata[it] = nod;
q.pb(it);
}
}
return tata[n];
}
int main()
{
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
scanf("%d%d", &n, &m);
for(; m; m--)
{
scanf("%d%d%d", &x, &y, &z);
v[x].pb(y);
v[y].pb(x);
cap[x][y] = z;
}
while(bf(1))
{
for(auto it : v[n])
{
if(tata[it])
{
tata[n] = it;
minflow = oo;
for(x = n; x != tata[x]; x = tata[x])
minflow = min(minflow, cap[tata[x]][x] - fl[tata[x]][x]);
for(x = n; x != tata[x]; x = tata[x])
{
fl[tata[x]][x] += minflow;
fl[x][tata[x]] -= minflow;
}
sol += minflow;
}
}
}
printf("%d", sol);
return 0;
}