RT 一直TLE 真的查不出来了
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll oo=0x7ffffff;
struct node
{
ll nxt;
ll to;
ll dis;
}e[50005];
ll cnt=-1;
ll head[50005],cur[50005];
ll from[50005];
ll dep[50005];
ll x,y,z;
ll maxflow;
ll n,m,s,t;
queue<ll> Q;
inline void read(ll &x)
{
ll f=1;char c;
for(x=0,c=getchar();c<'0'||c>'9';c=getchar()) if(c=='-') f=-1;
for(;c>='0'&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+(c^48); x*=f;
}
inline ll mx(ll _x,ll _y)
{
return _x>_y?_x:_y;
}
inline ll mn(ll _x,ll _y)
{
return _x<_y?_x:_y;
}
inline void add(ll from,ll to,ll dis)
{
e[++cnt].nxt=head[from];
e[cnt].to=to;
e[cnt].dis=dis;
head[from]=cnt;
}
inline bool bfs(ll s,ll t)
{
memset(dep,-1,sizeof(dep));
for(ll i=1;i<=n;i++) cur[i]=head[i];
while(!Q.empty()) Q.pop();
dep[s]=0;
Q.push(s);
while(!Q.empty())
{
ll tp=Q.front();
Q.pop();
for(ll i=head[tp];i!=-1;i=e[i].nxt)
{
ll to=e[i].to;
if(dep[to]==-1&&e[i].dis!=0)
{
dep[to]=dep[tp]+1;
Q.push(to);
}
}
}
if(dep[t]==-1) return false;
else return true;
}
inline ll dfs(ll now,ll t,ll limit)
{
if(now==t) return limit;
ll flow=0,f;
for(ll i=cur[now];i!=-1;i=e[i].nxt)
{
cur[now]=i;
ll to=e[i].to;
if(dep[to]==dep[now]+1&&e[i].dis>0)
{
f=dfs(to,t,mn(limit,e[i].dis));
if(f>0)
{
flow+=f;
limit-=f;
e[i].dis-=f;
e[i^1].dis+=f;
if(limit==0) return flow;
}
}
}
return flow;
}
inline ll Dinic(ll s,ll t)
{
while(bfs(s,t))
{
maxflow+=dfs(s,t,1e9);
}
}
int main()
{
memset(head,-1,sizeof(head));
read(n);read(m);read(s);read(t);
for(ll i=1;i<=m;i++)
{
read(x);read(y);read(z);
add(x,y,z);
add(y,x,0);
}
Dinic(s,t);
printf("%lld\n",maxflow);
return 0;
}