求赞!
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1010,M=20010;
queue<ll> q;
ll n,m,s,t,idx=1,ans,h[N],e[M],ne[M],w[M],pre[N],d[N];
bool st[N];
void add(ll u,ll v,ll c) {
e[++idx]=v,ne[idx]=h[u],w[idx]=c,h[u]=idx;
}
bool bfs() {
memset(st,0,sizeof(st));
q=queue<ll>();
st[s]=1,d[s]=9e18;
q.push(s);
while(!q.empty()) {
ll u=q.front();
q.pop();
for(ll i=h[u]; i; i=ne[i]) {
ll v=e[i];
if(!st[v] && w[i]) {
st[v]=1,pre[v]=i,d[v]=min(d[u],w[i]);
q.push(v);
if(v==t) return 1;
}
}
}
return 0;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m>>s>>t;
for(ll i=1,u,v,c; i<=m; ++i) cin>>u>>v>>c,add(u,v,c),add(v,u,0);
while(bfs()) {
ans+=d[t];
for(ll u=t; u!=s; u=e[pre[u]^1]) w[pre[u]]-=d[t],w[pre[u]^1]+=d[t];
}
cout<<ans;
return 0;
}