Pagini recente » Cod sursa (job #2462970) | Cod sursa (job #418496) | Cod sursa (job #2307993) | Cod sursa (job #1604753) | Cod sursa (job #1829276)
#include <bits/stdc++.h>
#define inf 1000000000
using namespace std;
int mat[1000][1000] = {0};
int rez[1000][1000] = {0};
vector<int> v[1000];
vector<int> invn;
int n, m;
int viz[1000];
int st[1000];
int lst, rst;
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);
v[b].push_back(a);
mat[a][b] = c;
}
while(true)
{
for(i = 0; i < n; i++)
viz[i] = -2;
viz[0] = -1;
st[0] = 0;
lst = 1;
rst = 0;
while(lst != rst)
{
r = st[rst];
rst++;
if(r == n - 1)
continue;
for(i = 0; i < v[r].size(); i++)
{
if(viz[v[r][i]] == -2 && mat[r][v[r][i]] != rez[r][v[r][i]])
{
viz[v[r][i]] = r;
st[lst++] = v[r][i];
}
}
}
if(viz[n - 1] == -2)
break;
for(i = 0; i < v[n - 1].size(); i++)
{
if(viz[v[n - 1][i]] != -2 && mat[v[n - 1][i]][n - 1] != rez[v[n - 1][i]][n - 1])
{
viz[n - 1] = v[n - 1][i];
a = n - 1;
b = inf;
while(viz[a] != -1)
{
b = min(b, mat[viz[a]][a] - rez[viz[a]][a]);
a = viz[a];
}
a = n - 1;
while(viz[a] != -1)
{
rez[a][viz[a]] -= b;
rez[viz[a]][a] += b;
a = viz[a];
}
}
}
}
c = 0;
for(i = 0; i < v[0].size(); i++)
{
c += rez[0][v[0][i]];
}
printf("%d", c);
return 0;
}