rt,不大会写第一个bfs
#include <bits/stdc++.h>
#define N 10010
#define M 200010
using namespace std;
int tot,n,m,s,t;
int lin[N],dis[N],cb[N];
queue<int> q,bs;
struct edge{
int to,nxt;
bool z;
}e[2*M];
void bfs1(int from){
int d=from;
q.push(d);
while(!q.empty()){
d=q.front(); q.pop();
for(int i=lin[d];i;i=e[i].nxt)
if(e[i].z==0&&dis[e[i].to]<cb[e[i].to])
q.push(e[i].to),dis[e[i].to]+=1;
}
}
int bfs2(int from){
int d=from,b=0;
dis[d]=1;
q.push(d),bs.push(0);
while(!q.empty()){
d=q.front();
b=bs.front();
bs.pop(),q.pop();
if(d==t)
return b;
for(int i=lin[d];i;i=e[i].nxt)
if(e[i].z==1&&dis[e[i].to]==cb[e[i].to])
q.push(e[i].to),bs.push(b+1);
}
return -1;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;
cin>>x>>y;
if(x==y) continue;
e[++tot]={y,lin[x],1},lin[x]=tot;
e[++tot]={x,lin[y],0},lin[y]=tot;
cb[x]+=1;
}
cin>>s>>t;
bfs1(t);
if(dis[s]==cb[s]) cout<<bfs2(s);
else cout<<-1;
return 0;
}