CSES - Shared codeLink to this code:
https://cses.fi/paste/b0d693d2c2b9e1ee69a382/
#include<iostream>
#include<cmath>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
#define ll long long int
ll edges[501][501],n,m;
int par[501];
bool vis[501];
bool bfs(long long k){
queue<int>que;
int u=1;
que.push(u);
memset(vis,0,sizeof vis);
while(!que.empty()){
u=que.front();
que.pop();
if(vis[u])continue;
vis[u]=true;
if(u==n)return true;
for(int v=1;v<=n;v++){
if(edges[u][v] and k<=edges[u][v] and !vis[v]){
par[v]=u;
que.push(v);
}
}
}
return vis[n];
}
int main(){
ll a,b,w,download=0;
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>a>>b>>w;
edges[a][b]+=w;
}
long long k=1ll<<40;
while(k){
while(bfs(k)){
a=n;
while(a!=1){
edges[par[a]][a]-=k;
edges[a][par[a]]+=k;
a=par[a];
}
download+=k;
}
k>>=1;
}
cout<<download;
return 0;
}