对着题解找了一个小时的不同愣是没找到 谢谢各位大佬!!
#include<bits/stdc++.h>
using namespace std;
int n,m;
int c_1,c_2;
int cnt;
int head[200+10];
int deep[200+10];
int maxx=INT_MAX;
queue <int> q;
struct line
{
int value;
int v;
int pre;
}b[4*600+200+10];
void jb(int u,int v,int w);
bool bfs();
int dinic();
int dfs(int id,int fol);
int main()
{
cin>>n>>m;
cin>>c_1>>c_2;
for(int i=1;i<=n;++i)
{
jb(i,i+n,1);
jb(i+n,i,0);
}
for(int i=1;i<=m;++i)
{
int x,y;
cin>>x>>y;
jb(x+n,y,maxx);
jb(y,x+n,0);
jb(y+n,x,maxx);
jb(x,y+n,0);
}
int a=dinic();
cout<<a;
return 0;
}
void jb(int u,int v,int w)
{
cnt++;
b[cnt].v=v;
b[cnt].pre=head[u];
b[cnt].value=w;
head[u]=cnt;
}
bool bfs()
{
while(q.size()) q.pop();
memset(deep,-1,sizeof(deep));
deep[c_1]=1;
q.push(c_1);
while(q.size())
{
int x=q.front();
q.pop();
if(x==c_2) return true;
for(int i=head[x];i;i=b[i].pre)
{
int uu=b[i].v;
if(deep[uu]==-1&&b[i].value)
{
deep[uu]=deep[x]+1;
if( uu==c_2) return true;
q.push(uu);
}
}
}
return false;
}
int dinic()
{
int ans;
while(bfs())
ans+=dfs(c_1,maxx);
return ans;
}
int dfs(int id,int fol)
{
int d;
if(id==c_2) return fol;
for(int i=head[id];i;i=b[i].pre)
{
int vv=b[i].v;
if(deep[vv]==deep[id]+1&&b[i].value&&(d=dfs(vv,min(b[i].value,fol))))
{
b[i].value-=d;
b[i^1].value+=d;
return d;
}
}
}