Code:

  1. #include<cstdio>
  2. #include<queue>
  3. #include<algorithm>
  4. using namespace std;
  5. const int maxn = 200000 + 3;
  6. int head[maxn<<1], to[maxn<<1], nex[maxn<<1], cnt;
  7. int mark[maxn], du[maxn], vis[maxn],d[maxn],del[maxn];
  8. queue<int>Q;
  9. inline void add_edge(int u,int v)
  10. {
  11. nex[++cnt] = head[u], head[u] = cnt, to[cnt] = v;
  12. }
  13. inline void solve(int s)
  14. {
  15. Q.push(s);
  16. mark[s] = 1;
  17. while(!Q.empty())
  18. {
  19. int u = Q.front();Q.pop();
  20. for(int v = head[u]; v ; v = nex[v])
  21. if(!mark[to[v]])
  22. {
  23. mark[to[v]] = 1;
  24. Q.push(to[v]);
  25. }
  26. }
  27. }
  28. int main()
  29. {
  30. //freopen("in.txt","r",stdin);
  31. int n,m;
  32. scanf("%d%d",&n,&m);
  33. for(int i = 1;i <= m;++i)
  34. {
  35. int a,b;
  36. scanf("%d%d",&a,&b);
  37. add_edge(b,a);
  38. du[a] = 1;
  39. }
  40. int s,t;
  41. scanf("%d%d",&s,&t);
  42. solve(t);
  43. for(int i = 1;i <= n;++i)
  44. {
  45. if(!mark[i])
  46. {
  47. del[i] = 1;
  48. for(int v = head[i]; v ; v = nex[v])
  49. {
  50. del[to[v]] = 1;
  51. }
  52. }
  53. }
  54. Q.push(t);
  55. vis[t] = 1, d[s] = -1;
  56. while(!Q.empty())
  57. {
  58. int u = Q.front();Q.pop();
  59. for(int v = head[u]; v ; v = nex[v])
  60. if(!vis[to[v]] && !del[to[v]])
  61. {
  62. vis[to[v]] = 1, d[to[v]] = d[u] + 1;
  63. Q.push(to[v]);
  64. }
  65. if(vis[s]) break;
  66. }
  67. printf("%d",d[s]);
  68. return 0;
  69. }

洛谷P2296 寻找道路_简单BFS的更多相关文章

  1. 洛谷——P2296 寻找道路

    P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...

  2. 洛谷P2296 寻找道路==codevs3731 寻找道路

    P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...

  3. 洛谷P2296 寻找道路 [拓扑排序,最短路]

    题目传送门 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...

  4. 洛谷 P2296 寻找道路 —— bfs

    题目:https://www.luogu.org/problemnew/show/P2296 第一次用 Emacs 对拍,写了半天: 注意那个 is 赋值的地方很容易错,千万别反复赋值: 一道水题写了 ...

  5. 洛谷 P2296 寻找道路【bfs+spfa】

    反向建边bfs出不能到t的点,然后对每个能到这些点的点打上del标记,然后spfa的时候不经过这些点即可 #include<iostream> #include<cstdio> ...

  6. [NOIP2014] 提高组 洛谷P2296 寻找道路

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  7. NOIP2014 day2 T2 洛谷P2296 寻找道路

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  8. 洛谷 [P2296] 寻找道路

    反向BFS预处理,求出所有符合题意的点,再正向BFS,(注意对于边权恒为一的点,BFS,比SPFA高效) 输入时n与m分清 #include <iostream> #include < ...

  9. 洛谷P2296寻找道路

    传送门啦 题目中有一个条件是路径上的所有点的出边所指向的点都直接或间接与终点连通. 所以我们要先判断能否走这一个点, $ bfs $ 类似 $ spfa $ 的一个判断,打上标记. 在这我反向建图,最 ...

随机推荐

  1. Eureka 服务的注册和发现

    二.Eureka 服务端 1.新建一个 maven module 子项目 microservicecloud-eureka-server 2.pom.xml <project xmlns=&qu ...

  2. 浅析IT系统监控方法和应用

    浅析IT系统监控方法和应用 http://blog.csdn.net/zhangman117/article/details/35549363

  3. javascript的==和===,以及if(xxx)总结

    转载请注明 本文出自:http://blog.csdn.net/nancle 首先说==和=== 首先说明一个非常特殊的值NaN, typeof(Nav)得到'number',可是NaN不等于不论什么 ...

  4. [BZOJ 3363] Cow Marathon

    [题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=3363 [算法] 树的直径 [代码] #include<bits/stdc++. ...

  5. 使用Azure Docker容器注册表服务

    1.登录你的Azure 容器注册表服务 az acr login --name ledesign 2.给你本地准备好的Image打上上云之前的版本标签 docker tag ledesign-serv ...

  6. 关于java1.8中LocalDateTime实现日期,字符串互转小坑。

    今天无聊,来看了下1.8的时间类型LocalDateTime,当想把字符串转成LocalDateTime的时候报错!! java.time.format.DateTimeParseException: ...

  7. Windows下Python + AutoCAD 多义线绘图小结

    简介 在windows下台下, 使用comtypes库, 通过ActiveX操作autocad, 从而读取AutoCAD数据 comtypes.client AutoCAD ActiveX GetAc ...

  8. BZOJ 1061费用流

    思路: 我们可以列出几个不等式 用y0带进去变成等式 下-上 可以消好多东西 我们发现 等式左边的加起来=0 可以把每个方程看成一个点 正->负 连边 跑费用流即可 //By SiriusRen ...

  9. asp.net 字符串过滤

    /// <summary> /// 去除HTML标记 /// </summary> /// <param name="Htmlstring">包 ...

  10. linux install PyMsql

    # 安装pip curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py python get-pip.py # 安装PyMysql pip in ...