做法:
建立队列 q,将 t 入队。
每次取出队头
所有能够到达队头的节点入读减一,同时求出该点到 t 的距离
节点入度为 0 则入队
只有 10pts
求 hack
Code:
#include<bits/stdc++.h>
using namespace std;
const int N = 10010;
const int M = 200010;
vector<int> vec[N];
int n,m;
int nxt[N];
int dis[N];
int s,t;
queue<int> q;
int main(){
scanf("%d%d",&n,&m);
for(int i = 1; i <= m; i++){
int u,v;
scanf("%d%d",&u,&v);
if(u==v) continue;
nxt[u]++;
vec[v].push_back(u);
}
scanf("%d%d",&s,&t);
q.push(t);
memset(dis,0x3f,sizeof(dis));
dis[t] = 0;
while(!q.empty()){
int fir = q.front();
q.pop();
for(auto v : vec[fir]){
nxt[v]--;
dis[v] = min(dis[v],dis[fir]+1);
if(nxt[v]==0){
q.push(v);
}
}
}
if(dis[s]!=0x3f3f3f3f) printf("%d",dis[s]);
else printf("-1");
return 0;
}