Pagini recente » Cod sursa (job #2634806) | Cod sursa (job #1685521) | Cod sursa (job #302828) | Cod sursa (job #1235560) | Cod sursa (job #2244946)
#include <bits/stdc++.h>
#define pii pair<int,int>
#define Nmax 1005
using namespace std;
ifstream f("maxflow.in");
ofstream g("maxflow.out");
int n,m,a,b,c,S = 1,D,ans;
int uz[Nmax],viz[Nmax];
vector<pii> E;
vector<int> H,v[Nmax],G[Nmax];
bool bfs(){
for (int i=1;i<=n;i++) G[i].clear();
memset(uz,0,sizeof(uz));
H.clear();
H.push_back(S); uz[S] = 1;
for (int i=0;i<H.size();i++){
if (H[i]==D) return 1;
for (auto it : v[H[i]]){
int nxt = E[it].first;
if (!E[it].second) continue;
if (!uz[nxt]){
uz[nxt] = uz[H[i]]+1;
H.push_back(nxt);
}
if (uz[nxt]==uz[H[i]]+1) G[H[i]].push_back(it);
}
}
return 0;
}
int dfs(int nod,int flow){
int crtF = 0;
viz[nod] = 1;
if (nod==D || !flow){
viz[nod] = 0;
return flow;
}
for (auto it : G[nod]){
int nxt = E[it].first;
if (viz[nxt]) continue;
int aux = dfs(nxt, min(flow-crtF,E[it].second));
crtF += aux;
E[it].second -= aux;
E[it^1].second += aux;
}
viz[nod] = 0;
return crtF;
}
int main()
{
ios::sync_with_stdio(false);
f >> n >> m;
D = n;
for (int i=1;i<=m;i++){
f >> a >> b >> c;
E.push_back({b,c});
v[a].push_back(E.size() - 1);
E.push_back({a,0});
v[b].push_back(E.size() - 1);
}
while (bfs()) ans += dfs(S,1e9);
g << ans;
return 0;
}