【洛谷 2296】寻找道路

2023-12-04 08:10
文章标签 道路 洛谷 寻找 2296

本文主要是介绍【洛谷 2296】寻找道路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述
在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件:
1 .路径上的所有点的出边所指向的点都直接或间接与终点连通。
2 .在满足条件1 的情况下使路径最短。
注意:图G 中可能存在重边和自环,题目保证终点没有出边。
请你输出符合条件的路径的长度。
输入
第一行有两个用一个空格隔开的整数n 和m ,表示图有n 个点和m 条边。
接下来的m 行每行2 个整数x 、y ,之间用一个空格隔开,表示有一条边从点x 指向点y 。
最后一行有两个用一个空格隔开的整数s 、t ,表示起点为s ,终点为t 。
输出
输出只有一行,包含一个整数,表示满足题目᧿述的最短路径的长度。如果这样的路径不存在,输出- 1 。
样例输入1
3 2
1 2
2 1
1 3
样例输入2
6 6
1 2
1 3
2 6
2 5
4 5
3 4
1 5
样例输出1
-1
样例输出2
3
算法讨论
这道题乍一看就是道裸SPFA,实则不然,他有路径上的所有点的出边所指向的点都直接或间接与终点连通这一条件,所以我们需要进行一个预处理:先从终点开始,将所有直接或间接连接的点打上标记,再做SPFA。做的时候如果当前点的所有连边上有不能到达终点的点,则此点不能更新。

constmaxn=10000;maxm=200000;
varx,y,x1,y1,next,next1:array[1..maxm] of longint;d,v,ls,ls1,list:array[1..maxn] of longint;f:array[1..maxn] of boolean;i,j,n,m,s,t,p:longint;procedure search(xx:longint);
vari:longint;
begini:=ls1[xx];f[xx]:=true;while i>0 dobeginif f[y1[i]]=falsethen search(y1[i]);i:=next1[i]end;
end;function check(xx:longint):boolean;
vari:longint;
begini:=ls[xx];if f[xx]=falsethen exit(false);while i>0 dobeginif f[y[i]]=falsethen exit(false);i:=next[i]end;exit(true)
end;procedure spfa;
vari,hd,tl,t:longint;
beginhd:=0; tl:=1;list[1]:=s;v[s]:=1;for i:=1 to n dod[i]:=maxlongint;d[s]:=0;while hd<>tl dobegininc(hd);t:=ls[list[hd]];while t>0 dobeginif (d[x[t]]+1<d[y[t]]) and (check(y[t]))then begind[y[t]]:=d[x[t]]+1;if v[y[t]]=0then begininc(tl);v[y[t]]:=1;list[tl]:=y[t]end;end;t:=next[t]end;v[list[hd]]:=0end;
end;beginread(n,m);for i:=1 to m dobeginread(x[i],y[i]);next[i]:=ls[x[i]];ls[x[i]]:=i;x1[i]:=y[i]; y1[i]:=x[i];next1[i]:=ls1[x1[i]];ls1[x1[i]]:=iend;read(s,t);search(t);spfa;if d[t]<>maxlongintthen write(d[t])else write(-1)
end.

这里写图片描述
Pixiv ID:61931955

这篇关于【洛谷 2296】寻找道路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/452767

相关文章

寻找身高相近的小朋友

题目描述: 小明今年升学到小学一年级,来到新班级后发现其他小朋友们身高参差不齐,然后就想基于各小朋友和自己的身高差对他们进行排序,请帮他实现排序。 输入描述: 第一行为正整数H和N,0<H<200,为小明的身高,0<N<50,为新班级其他小朋友个数。第二行为N个正整数H1-HN,分别是其他小朋友的身高,取值范围0<Hi<200(1<=i<=N),且N个正整数各不相同。 输出描述: 输出

【第0006页 · 数组】寻找重复数

【前言】本文以及之后的一些题解都会陆续整理到目录中,若想了解全部题解整理,请看这里: 第0006页 · 寻找重复数         今天想讨论的一道题在 LeetCode 上评论也是颇为“不错”。有一说一,是道好题,不过我们还是得先理解了它才算真正的好题。这里我们展示一种使用二进制的做法,希望能帮到你哟! 【寻找重复数】给定一个包含 n + 1 个整数的数组 nums ,其数字都

高精度计算(代码加解析,洛谷p1601,p1303)除法待更新

目录 高精度加法 高精度减法 高精度乘法 高精度加法 我们知道在c++语言中任何数据类型都有一定的表示范围。当两个被加数很大时,正常加法不能得到精确解。在小学,我们做加法都采用竖式方法。那么我们也只需要按照加法进位的方式就能得到最终解。 8 5 6+ 2 5 5-------1 1 1 1 加法进位: c[i] = a[i] + b[i];if(c[i] >=

洛谷 凸多边形划分

T282062 凸多边形的划分 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 先整一个半成品,高精度过两天复习一下补上 #include <iostream>#include <algorithm>#include <set>#include <cstring>#include <string>#include <vector>#include <map>

能量项链,洛谷

解释:  环形dp问题还是考虑将环拉直,可以参考我上一篇文章:环形石子合并 [2 3 5 10 2] 3 5 10 将环拉直,[]内是一个有效的区间,可以模拟吸收珠子的过程,         如[2 3 5] <=>(2,3)(3,5)    2是头,3是中间,5是尾 len >= 3:因为最后[2 10 2]是最小的可以合并的有效区间 len <= n + 1因为[2 3

DoIP-ISO 13400-1 道路车辆-基于互联网协议的诊断通信(DoIP)-第 1 部分:一般信息和用例定义 (1/2)

如下内容基于2011版本的 ISO 13400开展,内容较多,拆分为2篇,此篇为 1/2。 前言 ISO(国际标准化组织)是一个全球范围内的国际标准机构联合体(ISO 成员机构)。国际标准的制备工作通常通过 ISO 技术委员会进行。每个相关成员机构都有权在已建立的技术委员会中代表其利益。与 ISO 保持联系的国际组织、政府和非政府组织也参与这项工作。ISO 与国际电工委员会(IEC)在所有电气

windows手工杀毒-寻找可疑进程之线程

上篇回顾:windows手工杀毒-寻找可疑进程之进程模块-CSDN博客         上篇我们介绍了如何通过进程模块寻找可疑进程,进程模块文件按照PE格式存储,我们可以使用IDA等静态分析(不需要运行文件,只看文件内容)工具分析文件行为,也可以使用windbg,x64debug等动态分析(运行文件)文件行为,也可以根据文件所属公司,文件路径等文件相关信息寻找可疑进程。今天介绍如何通过线程寻找可疑

基于百度AIStudio飞桨paddleRS-develop版道路模型开发训练

基于百度AIStudio飞桨paddleRS-develop版道路模型开发训练 参考地址:https://aistudio.baidu.com/projectdetail/8271882 基于python35+paddle120+env环境 预测可视化结果: (一)安装环境: 先上传本地下载的源代码PaddleRS-develop.zip 解压PaddleRS-develop.zip到目录

数字时代,寻找新的生意增长点之前要做什么准备?

要做好最基础也最繁复的数据管理。 在竞争日益激烈的快消市场中,企业面临前所未有的挑战与压力。在这种高压环境下,数字化转型不再仅仅是选择,而是企业探索新的业务增长点、保持竞争优势的关键战略。然而,随着企业数字化进程的加速推进,业务系统持续生成的多样化与复杂化数据使得传统数据分析手段难以应对。因各系统间业财口径的不一致和数据维度的差异,企业在数据整合与分析过程中经常遭遇瓶颈,难以获得准确且具有前瞻性

书客、松下、飞利浦护眼台灯怎么样?测评寻找护眼台灯天花板!

大家好,我是专注在护眼领域的一名评测师,长期以来,我致力于探索并体验各类能保护视力健康的护眼产品。今天,我来和大家分享我对护眼台灯的深入评测。护眼台灯作为日常学习生活的一部分,视觉体验的好坏往往取决于所选用的台灯,然而,并非所有的护眼台灯都能完美契合我们对于舒适度与效率的期待。 作为一名经验丰富的评测博主,我深知光谱结构、光线设计这些都是评价一款护眼台灯好坏的重要标准。基于此,我特意选择了市场上