Pagini recente » Cod sursa (job #1719683) | Cod sursa (job #1750812)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1005,
INF = 1e9;
int n, m;
int cap[NMAX][NMAX],
flx[NMAX][NMAX],
pat[NMAX];
bool f[NMAX];
vector<int> g[NMAX];
inline bool bfs(void) {
queue<int> q;
bool flag;
int u;
memset(f, 0x00, sizeof(f));
q.push(1);
while(!q.empty()) {
u = q.front();
q.pop();
for(auto v:g[u]) {
if(cap[u][v]-flx[u][v]>0 && !f[v]) {
q.push(v);
pat[v] = u;
f[v] = true;
}
}
}
return f[n];
}
int main(void) {
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
int u, v, ant, fmin;
ant = 0;
scanf("%d%d", &n, &m);
while(m--) {
scanf("%d%d", &u, &v);
scanf("%d", &cap[u][v]);
g[u].push_back(v);
g[v].push_back(u);
}
while(bfs()) {
for(auto v:g[n]) {
fmin = INF;
pat[n] = v;
for(int i=n; i!=1; i=pat[i])
fmin = min(fmin, cap[pat[i]][i] - flx[pat[i]][i]);
if(fmin > 0) {
for(int i=n; i!=1; i=pat[i]) {
flx[pat[i]][i] += fmin;
flx[i][pat[i]] -= fmin;
}
ant += fmin;
}
}}
printf("%d\n", ant);
fclose(stdin);
fclose(stdout);
return 0;
}