Pagini recente » Cod sursa (job #2630595) | Cod sursa (job #1196505) | Cod sursa (job #1595120) | Cod sursa (job #2343472) | Cod sursa (job #1829253)
#include <bits/stdc++.h>
#define inf 1000000000
using namespace std;
int mat[1000][1000] = {0};
int rez[1000][1000] = {0};
vector< int > v[1000];
int n, m;
int st[1000];
int par[1000];
int lst;
bool viz[1000] = {0};
int main()
{
int i, j, a, b, c, r;
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
scanf("%d%d", &n, &m);
for(i = 0; i < m; i++)
{
scanf("%d%d%d", &a, &b, &c);
a--; b--;
v[a].push_back(b);
mat[a][b] = c;
}
c = 1;
while(c)
{
c = 0;
r = 0;
lst = 1;
st[0] = 0;
par[0] = -1;
for(i = 0; i < n; i++)
viz[i] = false;
viz[0] = true;
while(r < lst)
{
if(st[r] == n - 1)
{
a = inf;
b = n - 1;
while(par[b] != -1)
{
a = min(a, mat[par[b]][b] - rez[par[b]][b]);
b = par[b];
}
if(a != 0)
{
c = 1;
b = n - 1;
while(par[b] != -1)
{
rez[par[b]][b] += a;
b = par[b];
}
}
}
else
{
for(i = 0; i < v[st[r]].size(); i++)
{
if(!viz[v[st[r]][i]] && mat[st[r]][v[st[r]][i]] != rez[st[r]][v[st[r]][i]])
{
if(v[st[r]][i] != n - 1)
viz[v[st[r]][i]] = true;
par[v[st[r]][i]] = st[r];
st[lst++] = v[st[r]][i];
}
}
}
r++;
}
}
c = 0;
for(i = 0; i < v[0].size(); i++)
{
c += rez[0][v[0][i]];
}
printf("%d", c);
return 0;
}