WA+RE+TLE+AC
#include <bits/stdc++.h>
using namespace std;
#define int long long
struct edge {int to,cap,rev;};
int read();void add(int,int,int);
const int N=1e5+5,INF=1e17;
int n,m,s,t;
bool vis[N];
vector<edge> g[N];
int dfs(int v,int t,int f) {
if(v==t) return f;
vis[v]=1;
int tot=g[v].empty()?0:g[v].size();
for(int j=0;j<tot;++j) {
edge &i=g[v][j];
if(!vis[i.to]&&i.cap>0) {
int d=dfs(i.to,t,min(f,i.cap));
if(d>0) {
i.cap-=d;
g[i.to][i.rev].cap+=d;
return d;
}
}
}
return 0;
}
int flow(int s,int t) {
int ans=0;
while(true) {
memset(vis,0,sizeof(vis));
int f=dfs(s,t,INF);
if(f==0) return ans;
ans+=f;
}
}
signed main() {
cin>>n>>m>>s>>t;
int a,b,c;
while(m--) {
cin>>a>>b>>c;
add(a,b,c);
}
cout<<flow(s,t);
return 0;
}
void add(int fr,int to,int cap) {
int s1=g[fr].empty()?0:g[fr].size(),s2=g[to].empty()?0:g[to].size();
g[fr].push_back(edge{to,cap,s1});
g[to].push_back(edge{fr,0,s2});
}
int read() {
int x=0;
cin>>x;
return x;
}