#include<bits/stdc++.h>
using namespace std;
const int N=210;
const int M=5010;
const int inf=0x7fffffff;
struct EDGE{
int to,next,c;
}a[M<<1];int head[N],num=1;
void add(int from,int to,int w){
a[++num].to=to;
a[num].c=w;
a[num].next=head[from];
head[from]=num;
}
int n,m,s,t;
int dis[N],in[N];
bool spfa(){
for(int i=1;i<=n;i++) dis[i]=inf,in[i]=0;
queue<int> q;
q.push(s);
dis[s]=0;
while(!q.empty()){
int now=q.front();
q.pop();
in[s]=0;
for(int i=head[now];i;i=a[i].next){
int to=a[i].to;
if(a[i].c==0||dis[to]<=dis[now]+1) continue;
dis[to]=dis[now]+1;
if(in[to]) continue;
q.push(to);
in[to]=1;
}
}
if(dis[t]!=inf) return 1;
return 0;
}
int dfs(int now,int minflow){
if(now==t) return minflow;
for(int i=head[now];i;i=a[i].next){
int to=a[i].to;
if(!a[i].c||dis[to]!=dis[now]+1) continue;
int flow=0;
if(flow=dfs(to,min(minflow,a[i].c))){
a[i].c-=flow;
a[i^1].c+=flow;
return flow;
}
}
return 0;
}
int dinic(){
int sumflow=0;
while(spfa()){
int minflow=0;
while(minflow=dfs(s,inf)) sumflow+=minflow;
}
return sumflow;
}
int main(){
scanf("%d%d%d%d",&n,&m,&s,&t);
for(int i=1;i<=m;i++){
int from,to,w;
scanf("%d%d%d",&from,&to,&w);
add(from,to,w);
add(to,from,0);
}
cout<<dinic<<endl;////////////////这里
}
网络流dinic模板,为啥注释的那里没加括号也能运行,输出1