Pagini recente » Cod sursa (job #3160005) | Cod sursa (job #466381) | Cod sursa (job #2761564) | Cod sursa (job #535081) | Cod sursa (job #2962307)
#include <bits/stdc++.h>
using namespace std;
#define N 1005
#define oo 1e9
int n, m;
int cap[N][N], flow[N][N];
int tot[N];
bool viz[N];
vector <int> vec[N];
bool BFS()
{
int Q[N], nod;
Q[0] = Q[1] = 1;
memset(viz, false, sizeof viz);
viz[1] = true;
for(int i = 1; i <= Q[0]; ++i)
{
nod = Q[i];
if(nod == n) continue;
for(int i = 0; i < vec[nod].size(); ++i)
{
int k = vec[nod][i];
if(flow[nod][k] == cap[nod][k] || viz[k]) continue;
viz[k] = true;
Q[++Q[0]] = k;
tot[k] = nod;
}
}
return viz[n];
}
int flux()
{
int max_flow = 0, flmin;
while(BFS())
for(int i = 0; i < vec[n].size(); ++i)
{
int nod = vec[n][i];
if(flow[nod][n] == cap[nod][n] || viz[nod] == 0) continue;
tot[n] = nod;
flmin = oo;
for(int i = n; i != 1; i = tot[i])
flmin = min(flmin, cap[tot[i]][i] - flow[tot[i]][i]);
for(int i = n; i != 1; i = tot[i])
flow[tot[i]][i] += flmin,
flow[i][tot[i]] -= flmin;
max_flow += flmin;
}
return max_flow;
}
int main()
{
freopen("maxflow.in","rt",stdin);
freopen("maxflow.out","wt",stdout);
scanf("%d %d", &n, &m);
int x, y, z;
for(int i = 1; i <= m; ++i)
{
scanf("%d %d %d",&x, &y, &z);
vec[x].push_back(y);
vec[y].push_back(x);
cap[x][y] = z;
}
printf("%d", flux());
}