RT,求大佬们抽出少许时间帮助我这只蒟蒻/kel
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=500010;
const ll inf=2005020000;
int n,m,s,t,u,v,book[3000][3000],pre[N],head[N],cnt=1;
bool vis[N];
ll w,ans,dis[N];
queue <int> q;
struct edge{
int to,nex;
ll val;
}e[N];
inline void add(int a,int b,ll c){
e[++cnt].to=b;
e[cnt].val=w;
e[cnt].nex=head[a];
head[a]=cnt;
}
inline bool bfs(){
memset(vis,0,sizeof(vis));
while(q.size()) q.pop();
q.push(s);vis[s]=1;
dis[s]=inf;
while(!q.empty()){
int x=q.front();q.pop();
for(int i=head[x];i;i=e[i].nex){
if(!e[i].val) continue;
int to=e[i].to;
if(vis[to]) continue;
dis[to]=min(dis[x],e[i].val);pre[to]=i;
vis[to]=1;q.push(to);
if(to==t) return 1;
}
}
return 0;
}
inline void update(){
int a=t;
while(a!=s){
int b=pre[a];
e[b].val-=dis[t];
e[b^1].val+=dis[t];
a=e[b^1].to;
}
ans+=dis[t];
}
int main(){
scanf("%d%d%d%d",&n,&m,&s,&t);
while(m--){
cin>>u>>v>>w;
if(!book[u][v]) add(u,v,w),add(v,u,0),book[u][v]=cnt;
else e[book[u][v]-1].val+=w;
}
while(1)
if(bfs()) update();
else break;
printf("%lld\n",ans);
return 0;
}