Pagini recente » Cod sursa (job #2536879) | Cod sursa (job #2852676) | Cod sursa (job #2235151) | Cod sursa (job #2824945) | Cod sursa (job #3219807)
#include <bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#define pb push_back
#define int long long
using namespace std;
ifstream fin("maxflow.in");
ofstream fout("maxflow.out");
const int NMAX=300;
const int INF=2e9+10;
int v[NMAX][NMAX],n,a,b,c,maxx,m;
int d[NMAX];
int last[NMAX];
bool bfs(){
for(int i=1;i<=n;i++){
last[i]=1;
d[i]=0;
}
queue<int>q;
q.push(1);
while(!q.empty()){
int u=q.front();
q.pop();
if(u==n)continue;
for(int i=2;i<=n;i++){
if(d[i]==0&&v[u][i]>0){
d[i]=d[u]+1;
q.push(i);
}
}
}
return d[n];
}
int dfs(int nr,int flow){
if(nr==n)return flow;
while(last[nr] <= n){
int u=last[nr];
if(v[nr][u]>0&&d[u]==d[nr]+1){
int sol=dfs(u, min(flow, v[nr][u]));
if(sol!=0){
v[nr][u]-=sol;
v[u][nr] += sol;
return sol;
}
}
last[nr]++;
}
return 0;
}
int32_t main(){
fin>>n>>m;
for(int i=1;i<=m;i++){
int a,b,c;
cin>>a>>b>>c;
v[a][b]=c;
}
while(bfs()){
while(1){
int x=dfs(1,INF);
if(x!=0)maxx+=x;
else break;
}
}
fout << maxx;
return 0;
}