Pagini recente » Cod sursa (job #1641558) | Cod sursa (job #592635) | Cod sursa (job #2536687) | Cod sursa (job #1928776) | Cod sursa (job #2308028)
#include<bits/stdc++.h>
#define N 1005
using namespace std;
const int inf = 2e9;
vector<int> V[N];
int a[N][N];
queue<int> Q;
int viz[N];
int rs, n, m;
bool BFS() {
for (int i=1; i<=n; i++) viz[i] = -1;
viz[1] = 0;
while (Q.size()) Q.pop();
Q.push(1);
while (Q.size()) {
int x = Q.front(); Q.pop();
for (auto y : V[x]) {
if (viz[y]==-1 && a[x][y]>0) {
viz[y]=x;
Q.push(y);
if (y == n) return 1;
}
}
}
return 0;
}
int main() {
freopen("maxflow.in", "r", stdin);
freopen("maxflow.out", "w", stdout);
cin>>n>>m;
for (int i=1; i<=m; i++) {
int x,y,c; cin>>x>>y>>c;
V[x].push_back(y);
V[y].push_back(x);
a[x][y] += c;
}
while (BFS()) {
for (int j=0; j<V[n].size(); j++) {
int nod = V[n][j];
if (viz[nod]==-1) continue;
viz[n] = nod;
int pathFlow = inf;
for (int i=n; i!=1; i=viz[i]) {
pathFlow = min(pathFlow, a[viz[i]][i]);
}
for (int i=n; i!=1; i=viz[i]) {
a[viz[i]][i] -= pathFlow;
a[i][viz[i]] += pathFlow;
}
rs+=pathFlow;
}
}
cout<<rs;
return 0;
}