Pagini recente » Cod sursa (job #902962) | Cod sursa (job #2536916) | Cod sursa (job #2166195) | Cod sursa (job #2421972)
#include <bits/stdc++.h>
using namespace std;
int n;
int c[1010][1010];
int viz[1010];
int p[1010];
vector<int> g[1010];
void bfs()
{
queue<int> q;
memset(viz, 0, sizeof(viz));
memset(p, 0, sizeof(p));
viz[1] = 1;
p[1] = 1;
q.push(1);
while(!q.empty()) {
int nod = q.front();
q.pop();
for(int v : g[nod]) {
if(v != n && !viz[v] && c[nod][v] > 0) {
viz[v] = 1;
p[v] = nod;
q.push(v);
}
}
}
}
int main() {
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
int m;
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++) {
int a, b, cost;
scanf("%d%d%d", &a, &b, &cost);
c[a][b] = cost;
g[a].push_back(b);
g[b].push_back(a);
}
int maxflow = 0;
while(1) {
bfs();
int ok = 0;
for(int v : g[n])
{
if(viz[v] && c[v][n] > 0)
{
ok = 1;
int flow = c[v][n];
int nod = v;
while(nod != p[nod])
{
flow = min(flow, c[p[nod]][nod]);
nod = p[nod];
}
c[v][n] -= flow;
c[n][v] += flow;
nod = v;
while(nod != p[nod])
{
c[p[nod]][nod] -= flow;
c[nod][p[nod]] += flow;
nod = p[nod];
}
maxflow += flow;
}
}
if(!ok)
break;
}
printf("%d", maxflow);
return 0;
}