【问题描述】

在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件:

  1. 路径上的所有点的出边所指向的点都直接或间接与终点连通。
  2. 在满足条件 1 的情况下使路径最短。

注意:图 G 中可能存在重边和自环,题目保证终点没有出边。 请你输出符合条件的路径的长度。

【样例输入1】

3 2
    1 2
    2 1
    1 3

【样例输出1】

-1

【样例输入2】

6 6
    1 2
    1 3
    2 6
    2 5
    4 5
    3 4
    1 5

【样例输出2】

3

【解题思路】

又是要用邻接表的题,我又华丽丽地用了邻接矩阵,加上当初SB一般的用广搜+深搜去搜能到的顶点,用了两个布尔型数组,求最短路的时候用了floyed(其实这个都没什么了,之前的就足够MLE了……),再次爆零……

OK,吐槽完之后,继续来说正解。

邻接表,不多说了,以后看到需要存储边的题目都去用邻接表!管你有没有权。由于这题需要判断能否到达终点,于是我们需要反向存储。一遍DFS找到所有不能直接或间接到达的点,将它们的所有的入边的点全部删掉,如果起点无法到达的话,就输出-1,否则就是求最短路了。

【代码实现】

 1 type rec=record
 2      c,next:longint;
 3 end;
 4 var e:array[1..200000] of rec;
 5     g:array[1..10000] of longint;
 6     efree,i,n,m,k,x,y,s,t,j:longint;
 7     a:array[1..10000] of longint;
 8     f,flag:array[1..10000] of boolean;
 9 procedure add;
10 begin
11  e[efree].c:=x;
12  e[efree].next:=g[y];
13  g[y]:=efree;
14  inc(efree);
15 end;
16 procedure dfs(x:longint);
17 var j:longint;
18 begin
19  f[x]:=true;
20  j:=g[x];
21  while j<>0 do
22   begin
23    if not f[e[j].c] then
24     dfs(e[j].c);
25    j:=e[j].next;
26   end;
27 end;
28 procedure dijkstra;
29 var i,j,min,pos:longint;
30 begin
31  fillchar(f,sizeof(f),false);
32  f[t]:=true;
33  a[t]:=0;
34  for j:=1 to n do
35   begin
36    pos:=t;
37    min:=maxint;
38    for i:=1 to n do
39     if (not f[i])and(a[i]<min)and(flag[i]) then
40      begin
41       pos:=i;
42       min:=a[i];
43      end;
44    f[pos]:=true;
45    i:=g[pos];
46    while i<>0 do
47     begin
48      if flag[e[i].c] then
49       if a[e[i].c]>a[pos]+1 then
50        a[e[i].c]:=a[pos]+1;
51      i:=e[i].next;
52     end;
53   end;
54 end;
55 begin
56  readln(n,m);
57  efree:=1;
58  for i:=1 to m do
59   begin
60    readln(x,y);
61    add;
62   end;
63  readln(s,t);
64  dfs(t);
65  flag:=f;
66  for i:=1 to n do
67   if not f[i] then
68    begin
69     j:=g[i];
70     while j<>0 do
71      begin
72       flag[e[j].c]:=false;
73       j:=e[j].next;
74      end;
75    end;
76  if not flag[s] then
77   begin
78    writeln(-1);
79    halt;
80   end;
81  for i:=1 to n do
82   a[i]:=maxint;
83  dijkstra;
84  writeln(a[s]);
85 end.

转载于:https://www.cnblogs.com/PengBoLiuXu/p/4536158.html

寻找道路(codevs 3731)题解相关推荐

  1. P2296 寻找道路

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

  2. Luogu 2296 寻找道路

    https://www.luogu.org/problemnew/show/2296 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以 ...

  3. [NOIP2014] 寻找道路

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

  4. 1807. [NOIP2014]寻找道路P2296 寻找道路

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

  5. 洛谷 P2296 寻找道路

    感慨 周五比赛的测试题,结果到比赛结束也没有读懂题意...给的样例太少了,我一直以为我是不是spfa敲错了...没想到中间还有卡的地方 分析 题目中的一句耐人寻味的话"路径上的所有点的出边所 ...

  6. 洛谷2296 寻找道路

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

  7. NOIP2014洛谷P2296:寻找道路(bfs)

    解析 杀鸡焉用AS47 做的巨差的一道题 WA3遍+写的巨麻烦+复杂度被吊打 qwq 说起来很玄学,但第一交之前就有一种强烈的预感觉得自己会WA 一开始像个傻子一样对有环图上记搜 WA了还不知道为啥- ...

  8. NOIP2014 寻找道路

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

  9. 2017.5.9 寻找道路 思考记录

    一定认真读题,不然被坑死 注意是根据这个点的下一个点判断这个点.. 而且写代码一定注意每个语句的细节 码: #include<iostream> #include<cstdio> ...

最新文章

  1. pd.read_csv读取txt时整型变成浮点型问题解决
  2. 伪共享(false sharing),并发编程无声的性能杀手
  3. 华为路由器配置默认路由为什么配偶的下一跳不可达也可以_静态路由特性
  4. python 连接数据库-设置oracle ,mysql 中文字符问题
  5. 字节跳动offer流程多长时间_字节跳动-运营实习生-面经实录(已Offer??)
  6. 获取macos mojave_高仿MacOS教程
  7. Nginx的初步安装
  8. centos下python编程工具_CentOS下python的下载及安装
  9. 【Flink】Flink 系统监控指标
  10. SQL注入漏洞修复办法
  11. linux waitpid子进程,关于waitpid()函数的问题,为什么最后子进程没退出来啊?...
  12. 以智能制造推动企业数字化转型的方法、路径和举措
  13. Python2.7版本的pip下载安装(win7 64位,Python2.7)
  14. 基于贝叶斯网络模型的自适应测评
  15. __ieee80211_data_to_8023
  16. Spark ML 构建回归模型
  17. html中的圆圈链接,html – 如何在svg圈内添加链接
  18. 2001-2019年中国境内企业并购数据
  19. SIRIUS更新日志|SIRIUS人脸识别更新日志|天狼星人脸识别更新日志
  20. Iphone开发用导航控制器实现视图的分层切换(UINavigationController)

热门文章

  1. JZOJ 4238. 【五校联考5day2】纪念碑
  2. python读取rar文件_在 python 中,如何读取由 7z 压缩的文本文件_python_酷徒编程知识库...
  3. android 单例存储,Android 单例在内存中存储数据
  4. java 对象创建过程_5种创建Java对象的方式
  5. UCINET 社会网络分析工具
  6. BZOJ 1500 Luogu P2042 [NOI2005] 维护数列 (Splay)
  7. 计算机网络校园网建设设计摘要,计算机网络专业论文校园网建设设计.doc
  8. 电脑技术吧_极简技术|快速整理电脑桌面繁乱的图标
  9. Linux系统云主机教程,新开的linux云主机磁盘挂载教程
  10. ASP.NET Core 认证与授权[6]:授权策略是怎么执行的?