Pagini recente » Cod sursa (job #2922760) | Cod sursa (job #2692980) | Cod sursa (job #2286123) | Cod sursa (job #1848821) | Cod sursa (job #1396974)
#include <bits/stdc++.h>
using namespace std;
#define mp make_pair
#define fs first
#define sc second
#define pob pop_back
#define pub push_back
#define eps 1E-7
#define sz(a) a.size()
#define count_one __builtin_popcount;
#define count_onell __builtin_popcountll;
#define fastIO ios_base::sync_with_stdio(false)
#define PI (acos(-1.0))
#define linf (1LL<<62)//>4e18
#define inf (0x7f7f7f7f)//>2e9
#define MAXN 1010
#ifndef ONLINE_JUDGE
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
#endif
int n, m;
int minflow;
int fn[MAXN];
int f[MAXN][MAXN];
int cap[MAXN][MAXN];
vector<int> vec[MAXN];
bitset<MAXN> viz;
bool BFS() {
int nod;
queue<int> Q;
Q.push(1);
viz.reset();
while(!Q.empty()) {
nod = Q.front(); Q.pop();
if(nod != n)
for(auto it : vec[nod]) {
if(cap[nod][it] != f[nod][it] && !viz[it]) {
viz[it] = 1;
Q.push(it);
fn[it] = nod;
}
}
}
return viz[n];
}
int main() {
fin >> n >> m;
int a, b, c;
for(int i = 0; i < m; ++i) {
fin >> a >> b >> c;
vec[a].pub(b);
vec[b].pub(a);
cap[a][b] += c;
}
int flow = 0;
while(BFS()) for(auto it: vec[n]) if(cap[it][n] != f[it][n] && viz[it]){
minflow = inf;
fn[n] = it;
for(int nod = it; nod != 1; nod = fn[nod]) {
minflow = min(minflow, cap[fn[nod]][nod] - f[fn[nod]][nod]);
}
for(int nod = it; nod != 1; nod = fn[nod]) {
f[fn[nod]][nod] += minflow;
f[nod][fn[nod]] -= minflow;
}
flow += minflow;
}
fout << flow << "\n";
return 0;
}