#include<bits/stdc++.h>
#define FOR(i,a,b) for(register int i=a;i<=b;i++)
#define ROF(i,a,b) for(register int i=a;i>=b;i--)
#define P std::pair
#define Q std::queue
#define V std::vector
#define MP std::make_pair
#define fi first
#define se second
#define pb emplace_back
#define int long long
#define db long double
#define ls(x) (x<<1)
#define rs(x) (x<<1)|1
#define lowbit(x) (x&(-x))
const int N=1205,inf=0x3f3f3f3f3f3f3f3f;
struct Edge{
int v,w,r;
};
V<Edge>a[N];
void add(int u,int v,int w){
a[u].pb(Edge{v,w,(int)a[v].size()});
a[v].pb(Edge{u,0,(int)a[u].size()-1});
}
int n,m,s,t;
int ht[N],ex[N],gap[N],lvl=0;
std::stack<int>B[N];
int push(int u){
bool init=(u==s);
for(auto&i:a[u]){
if(!i.w||(!init&&ht[u]!=ht[i.v]+1)||ht[i.v]==inf)continue;
int k=init?i.w:std::min(i.w,ex[u]);
if(i.v!=s&&i.v!=t&&!ex[i.v])B[ht[i.v]].push(i.v),lvl=std::max(lvl,ht[i.v]);
ex[u]-=k,ex[i.v]+=k,i.w-=k,a[i.v][i.r].w+=k;
if(!ex[u])return 0;
}
return 1;
}
void relabal(int u){
ht[u]=inf;
for(auto i:a[u])if(i.w)ht[u]=std::min(ht[u],ht[i.v]);
if(++ht[u]<n){
B[ht[u]].push(u);
lvl=std::max(lvl,ht[u]);
++gap[ht[u]];
}
}
bool bfs(){
memset(ht,0x3f,sizeof(ht));
Q<int>q;q.push(t);ht[t]=0;
while(!q.empty()){
int u=q.front();q.pop();
for(auto i:a[u])
if(a[i.v][i.r].w&&ht[i.v]>ht[u]+1)
ht[i.v]=ht[u]+1,q.push(i.v);
}
return ht[s]!=inf;
}
int select(){
while(~lvl&&B[lvl].empty())lvl--;
return lvl==-1?0:B[lvl].top();
}
int hlpp(){
if(!bfs())return 0;
FOR(i,1,n)if(ht[i]!=inf)gap[ht[i]]++;
ht[s]=n;push(s);int u;
while((u=select())){
B[lvl].pop();
if(push(u)){
if(!--gap[ht[u]])FOR(i,1,n)
if(i!=s&&ht[i]>ht[i]&&ht[i]<n+1)
ht[i]=n+1;
relabal(u);
}
}
return ex[t];
}
signed main(){
std::cin.tie(0)->sync_with_stdio(0);
std::cin>>n>>m>>s>>t;
FOR(i,1,m){
int u,v,w;
std::cin>>u>>v>>w;
add(u,v,w);
}
std::cout<<hlpp();
return 0;
}
hlpp里面我写成了ht[i]>ht[i]但一样过了这题