Pagini recente » Cod sursa (job #1431534) | Cod sursa (job #2294086) | Cod sursa (job #903654) | Cod sursa (job #644181) | Cod sursa (job #2959822)
#include <fstream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
ifstream cin("maxflow.in");
ofstream cout("maxflow.out");
using ll = long long;
using vi = vector<int>;
#define f first
#define s second
#define pb push_back
#define all(x) begin(x), end(x)
#define F0R(i,a) for(int i=0; i<(a); i++)
#define FOR(i,a,b) for(int i=(a); i<=(b); i++)
#define R0F(i,a) for(int i=(a)-1; i>=0; i--)
#define ROF(i,a,b) for(int i=(b); i>=a; i--)
#define trav(a,x) for (auto& a: x)
int n, m;
int adj[1001][1001], oadj[1001][1001];
int flow[1001];
bool V[1001];
int pa[1001];
bool reachable() {
memset(V, false, sizeof(V));
queue<int> Q; Q.push(1); V[1]=1;
while(!Q.empty()) {
int i=Q.front(); Q.pop();
FOR(j,1,n) if (adj[i][j] && !V[j])
V[j]=1, pa[j]=i, Q.push(j);
}
return V[n];
}
int main() {
cin >> n >> m;
FOR(i,1,n) FOR(j,1,n) adj[i][j] = 0;
F0R(i,m) {
ll a,b,c; cin >> a >> b >> c;
adj[a][b] += c;
}
int v, u;
int maxflow = 0;
while(reachable()) {
int flow = 1e9;
for (v=n; v!=1; v=pa[v]) {
u = pa[v];
flow = min(flow, adj[u][v]);
}
maxflow += flow;
for (v=n; v!=1; v=pa[v]) {
u = pa[v];
adj[u][v] -= flow;
adj[v][u] += flow;
}
}
cout << maxflow << '\n';
}