Pagini recente » Cod sursa (job #2377175) | Cod sursa (job #75567) | Cod sursa (job #1675438) | Cod sursa (job #374356) | Cod sursa (job #526030)
Cod sursa(job #526030)
#include <cstdio>
#include <vector>
using namespace std;
const int N = 1005;
int n, m, S, D;
const int INF = 0x3f3f3f3f;
int c[N][N], f[N][N], t[N], v[N];
vector<int> a[N];
int BFS() {
int i, j, k;
int cd[1005];
for(i = 1; i <= n; ++i)
t[i] = v[i] = 0;
cd[0] = 1;
cd[1] = S;
v[1] = 1;
for(i = 1; i <= cd[0]; ++i) {
k = cd[i];
if(k == D)
break;
for(j = 0; j < a[k].size(); ++j)
if(f[k][a[k][j]] < c[k][a[k][j]] && !v[a[k][j]]) {
cd[++cd[0]] = a[k][j];
t[a[k][j]] = k;
v[a[k][j]] = 1;
}
}
return v[D];
}
int main() {
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
int i, j, C, x, y, s[N], d[N];
scanf("%d %d", &n, &m);
for(i = 1; i <= m; ++i)
scanf("%d %d %d", &x, &y, &C), c[x][y] += C, a[x].push_back(y), a[y].push_back(x);
int flux = 0, r = 0;
S = 1;
D = n;
for(;BFS() ;) {
for(j = 0; j < a[D].size(); ++j){
if( f[a[D][j]][D] < c[a[D][j]][D] && v[a[D][j]]){
i = D;
t[D] = a[D][j];
r = INF;
while(t[i]) {
r = min(r, c[t[i]][i] - f[t[i]][i]);
i = t[i];
}
i = D;
if(r) {
while(t[i]) {
f[i][t[i]] -= r;
f[t[i]][i] += r;
i = t[i];
}
flux += r;
}
}
}
}
printf("%d\n", flux);
return 0;
}