#include <bits/stdc++.h>
using namespace std;
const int maxn = 10005;
set<int> to[maxn];
queue<int> q;int s, t;int n, m;set<int> to2[maxn];
int dist[maxn], used[maxn], dist2[maxn];
int main() {
cin >> n >> m;
for(int i = 1; i <= m; i++) {
int x, y;
cin >> x >> y;
to[x].insert(y);
to2[y].insert(x);
}
cin >> s >> t;
q.push(t);
memset(dist2, -1, sizeof(dist2));
dist2[t] = 0;
memset(used, 0, sizeof(used));
used[t] = 1;
while(!q.empty()) {
int x = q.front();
q.pop();
set<int>::iterator it;
for(it = to2[x].begin(); it != to2[x].end(); it++) {
if(!used[*it]) {
dist2[*it] = dist2[x] + 1;
used[*it] = 1;
q.push(*it);
}
}
}
memset(used, 0, sizeof(used));
for(int i = 1; i <= n; i++) {
if(dist2[i] == -1) {
set<int>::iterator it;
for(it = to2[i].begin(); it!=to2[i].end(); it++) {
used[*it] = 1;
}
}
}
memset(dist, -1, sizeof(dist));
dist[s] = 0;
q.push(s);
used[s] = 1;
while(!q.empty()) {
int x = q.front();
q.pop();
set<int>::iterator it;
for(it = to[x].begin(); it != to[x].end(); it++) {
if(!used[*it]) {
dist[*it] = dist[x] + 1;
used[*it] = 1;
q.push(*it);
}
}
}
cout << dist[t];
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Ai满嘴顺口溜,想考研?浪费我几个小时
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法