Pagini recente » Cod sursa (job #1911564) | Cod sursa (job #1512632) | Cod sursa (job #1592892) | Cod sursa (job #3225217) | Cod sursa (job #1409986)
#include <bits/stdc++.h>
#define N 1005
#define pb push_back
#define oo 1<<30
using namespace std;
vector<int>v[N];
deque<int>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.front();
q.pop_front();
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;
}