就是一个模板题
就不解释了,
相信各位大佬能看懂
#include
#define INF 100000
using namespace std;
int head[105],nex[2005],tail[2005],cap[2005],tp=-1,dep[105];
int fir[105];
int n,m,s,t,a,b,v;
int dfs(int x,int now)
{
if(!now || x==t) return now;
int c=0;
for(int &i=fir[x];i!=-1;i=nex[i])
{
if(cap[i] && dep[tail[i]]==dep[x]+1)
{
int f=dfs(tail[i],min(now,cap[i]));
c+=f;
now-=f;
cap[i]-=f;
cap[i^1]+=f;
}
}
return c;
}
inline bool bfs()
{
memset(dep,0,sizeof(dep));
dep[s]=1;
queue
q;
q.push(s);
while(!q.empty())
{
int x=q.front();
q.pop();
for(int i=head[x];i!=-1;i=nex[i])
{
if(cap[i]&&!dep[tail[i]])
{
dep[tail[i]]=dep[x]+1;
q.push(tail[i]);
}
}
}
return dep[t];
}
void add(int x,int y,int v)
{
nex[++tp]=head[x];
head[x]=tp;
tail[tp]=y;
cap[tp]=v;
}
inline int Dinic()
{
int c=0;
while(bfs())
{
for(int i=1;i<=n;++i) fir[i]=head[i];
c+=dfs(s,INF);
}
return c;
}
int main()
{
memset(head,-1,sizeof(head));
scanf("%d%d%d%d",&n,&m,&s,&t);
for(int i=1;i<=m;++i)
{
scanf("%d%d%d",&a,&b,&v);
add(a,b,v);
add(b,a,0);
}
printf("%d",Dinic());
return 0;
}