洛谷 P2296 寻找道路

题目描述

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

1 .路径上的所有点的出边所指向的点都直接或间接与终点连通。

2 .在满足条件1 的情况下使路径最短。

注意:图G 中可能存在重边和自环,题目保证终点没有出边。

请你输出符合条件的路径的长度。

输入输出格式

输入格式:

 

输入文件名为road .in。

第一行有两个用一个空格隔开的整数n 和m ,表示图有n 个点和m 条边。

接下来的m 行每行2 个整数x 、y ,之间用一个空格隔开,表示有一条边从点x 指向点y 。

最后一行有两个用一个空格隔开的整数s 、t ,表示起点为s ,终点为t 。

 

输出格式:

 

输出文件名为road .out 。

输出只有一行,包含一个整数,表示满足题目᧿述的最短路径的长度。如果这样的路径不存在,输出- 1 。

 

输入输出样例

输入样例#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

说明

解释1:

如上图所示,箭头表示有向道路,圆点表示城市。起点1 与终点3 不连通,所以满足题

目᧿述的路径不存在,故输出- 1 。

解释2:

如上图所示,满足条件的路径为1 - >3- >4- >5。注意点2 不能在答案路径中,因为点2连了一条边到点6 ,而点6 不与终点5 连通。

对于30%的数据,0<n≤10,0<m≤20;

对于60%的数据,0<n≤100,0<m≤2000;

对于100%的数据,0<n≤10,000,0<m≤200,000,0<x,y,s,t≤n,x≠t。

 

 

正反存边

反跑dfs标记终点能到达的点 也就是能到达终点的点

然后把出边不能到达终点的点标记为不能走

然后正跑spfa

屠龙宝刀点击就送

#include <vector>
#include <cstdio>
#include <queue>
#define N 10005
using namespace std;
vector<int>G1[N],G2[N];
bool cant[N],vis[N];
int n,m,s,t,dis[N];
void dfs(int x)
{vis[x]=1;for(int i=0;i<G2[x].size();++i){int v=G2[x][i];if(!vis[v]) dfs(v);}
}
int main()
{scanf("%d%d",&n,&m);for(int x,y,i=1;i<=m;++i){scanf("%d%d",&x,&y);G1[x].push_back(y);G2[y].push_back(x); }scanf("%d%d",&s,&t);dfs(t);for(int i=1;i<=n;++i){bool flag=false;if(!vis[i]) {cant[i]=1;continue;}for(int j=0;j<G1[i].size();++j){int v=G1[i][j];if(!vis[v]) {flag=1;break;} }if(flag) {cant[i]=1;continue;}}for(int i=1;i<=n;++i) dis[i]=0x3f3f3f3f,vis[i]=0;dis[s]=0;vis[s]=1;queue<int>q;q.push(s);for(int now;!q.empty();){now=q.front();q.pop();vis[now]=0;if(cant[now]) continue;for(int i=0;i<G1[now].size();++i){int v=G1[now][i];if(dis[v]>dis[now]+1){dis[v]=dis[now]+1;if(!vis[v]){q.push(v);vis[v]=1; }}}}dis[t]==0x3f3f3f3f?printf("-1"):printf("%d",dis[t]);return 0;
}

 

转载于:https://www.cnblogs.com/ruojisun/p/7506696.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Feature Preprocessing on Kaggle

刚入手data science, 想着自己玩一玩kaggle&#xff0c;玩了新手Titanic和House Price的 项目, 觉得基本的baseline还是可以写出来&#xff0c;但是具体到一些细节&#xff0c;以至于到能拿到的出手的成绩还是需要理论分析的。 本文旨在介绍kaggle比赛到各种原理与技巧&#xf…

十天冲刺-04

昨天&#xff1a;完成了日历界面的部署&#xff0c;并且能够获取到选中的日期 今天&#xff1a;完成根据日期查找消费记录功能 问题&#xff1a;日历界面占用屏幕太多&#xff0c;后期会进行调整转载于:https://www.cnblogs.com/liujinxin123/p/10760254.html

构建Spring Boot程序有用的文章

构建Spring Boot程序有用的文章&#xff1a; http://www.jb51.net/article/111546.htm转载于:https://www.cnblogs.com/xiandedanteng/p/7508334.html

如果您遇到文件或数据库问题,如何重置Joomla

2019独角兽企业重金招聘Python工程师标准>>> 如果您遇到Joomla站点的问题&#xff0c;那么重新安装其核心文件和数据库可能是最佳解决方案。 了解问题 这种方法无法解决您的所有问题。但它主要适用于由Joomla核心引起的问题。 运行Joomla核心更新后&#xff0c;这些…

数组初始化 和 vector初始化

int result[256] {0}; 整个数组都初始化为0 vector<int> B(length,1); 整个vector初始化为1 如果你定义的vector是这样定义的&#xff1a; vector<int> B; 去初始化&#xff0c;千万不要用&#xff1a; for(int i 0;i < length;i)B[i] 1; 这样会数组越界&…

Genymotion模拟器拖入文件报An error occured while deploying the file的错误

今天需要用到资源文件&#xff0c;需要将资源文件拖拽到sd卡中&#xff0c;但老是出现这个问题&#xff1a; 资源文件拖不进去genymotion。查看了sd的DownLoad目录&#xff0c;确实没有成功拖拽进去。 遇到这种问题的&#xff0c;我按下面的思路排查问题&#xff1a; Genymotio…

激光炸弹(BZOJ1218)

激光炸弹&#xff08;BZOJ1218&#xff09; 一种新型的激光炸弹&#xff0c;可以摧毁一个边长为R的正方形内的所有的目标。现在地图上有n(N<10000)个目标&#xff0c;用整数Xi,Yi(其值在[0,5000])表示目标在地图上的位置&#xff0c;每个目标都有一个价值。激光炸弹的投放是…

/usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15 not found

解决错误呈现该错误的原因是当前的GCC版本中&#xff0c;没有GLIBCXX_3.4.15&#xff0c;须要安装更高版本。我们可以输入&#xff1a;strings /usr/lib/libstdc.so.6 | grep GLIBCXX&#xff0c;查看当前的GCC版本&#xff0c;成果如下&#xff1a;GLIBCXX_3.4 GLIBCXX_3.4.1 …

用servlet设计OA管理系统时遇到问题

如果不加单引号会使得除变量和int类型的值不能传递 转发和重定向的区别 转发需要填写完整路径&#xff0c;重定向只需要写相对路径。原因是重定向是一次请求之内已经定位到了服务器端&#xff0c;转发则需要两次请求每次都需要完整的路径。 Request和response在解决中文乱码时的…

JDK源码——利用模板方法看设计模式

前言&#xff1a; 相信很多人都听过一个问题&#xff1a;把大象关进冰箱门&#xff0c;需要几步&#xff1f; 第一&#xff0c;把冰箱门打开&#xff1b;第二&#xff0c;把大象放进去&#xff1b;第三&#xff0c;把冰箱门关上。我们可以看见&#xff0c;这个问题的答案回答的…

[Usaco2010 Mar]gather 奶牛大集会

1827: [Usaco2010 Mar]gather 奶牛大集会 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1129 Solved: 525 [Submit][Status][Discuss]Description Bessie正在计划一年一度的奶牛大集会&#xff0c;来自全国各地的奶牛将来参加这一次集会。当然&#xff0c;她会选择最方便的…

与TIME_WAIT相关的几个内核参数

问题 公司用浏览器访问线上服务一会失败一会成功&#xff0c;通过ssh连接服务器排查时发现ssh也是这样&#xff1b; 检查 抓包后发现建立连接的请求已经到了服务器&#xff0c;但它没有响应&#xff1b; 纠结了好久&#xff0c;后来在腾讯云技术支持及查了相关资料后发现是开启…

View的绘制-layout流程详解

目录 作用 根据 measure 测量出来的宽高&#xff0c;确定所有 View 的位置。 具体分析 View 本身的位置是通过它的四个点来控制的&#xff1a; 以下涉及到源码的部分都是版本27的&#xff0c;为方便理解观看&#xff0c;代码有所删减。 layout 的流程 先通过 measure 测量出 Vi…

1-1、作用域深入和面向对象

课时1&#xff1a;预解释 JS中的数据类型 number、string、 boolean、null、undefined JS中引用数据类型 object: {}、[]、/^$/、Date Function var num12; var obj{name:白鸟齐鸣,age:10}; function fn(){ console.log(勿忘初心方得始终&#xff01;) }console.log(fn);//把整…

茶杯头开枪ahk代码

;说明这个工具是为了茶杯头写的,F1表示换枪攻击,F3表示不换枪攻击,F2表示停止攻击. $F1::loop{ GetKeyState, state, F2, Pif state D{break } Send, {l down}Send, {l up}sleep,10Send,{m down}Send,{m up} }return $F3::loop{ GetKeyState, state, F2, Pif state D{break }…

Vim使用技巧:撤销与恢复撤销

在使用VIM的时候&#xff0c;难免会有输错的情况&#xff0c;这个时候我们应该如何撤销&#xff0c;然后回到输错之前的状态呢&#xff1f;答案&#xff1a;使用u&#xff08;小写&#xff0c;且在命令模式下&#xff09;命令。 但如果有时我们一不小心在命令模式下输入了u&…

PaddlePaddle开源平台的应用

最近接触了百度的开源深度学习平台PaddlePaddle&#xff0c;想把使用的过程记录下来。 作用&#xff1a;按照这篇文章&#xff0c;能够实现对图像的训练和预测。我们准备了四种颜色的海洋球数据&#xff0c;然后给不同颜色的海洋球分类为0123四种。 一、安装paddlepaddle 1.系统…

Hyperledger Fabric区块链工具configtxgen配置configtx.yaml

configtx.yaml是Hyperledger Fabric区块链网络运维工具configtxgen用于生成通道创世块或通道交易的配置文件&#xff0c;configtx.yaml的内容直接决定了所生成的创世区块的内容。本文将给出configtx.yaml的详细中文说明。 如果需要快速掌握Fabric区块链的链码与应用开发&#x…

js闭包??

<script>var name "The Window";var object {name : "My Object",getNameFunc : function(){console.log("11111");console.log(this); //this object //调用该匿名函数的是对象return function(){console.log("22222");co…

JavaScript----BOM(浏览器对象模型)

BOM 浏览器对象模型 BOM 的全称为 Browser Object Model,被译为浏览器对象模型。BOM提供了独立于 HTML 页面内容&#xff0c;而与浏览器相关的一系列对象。主要被用于管理浏览器窗口及与浏览器窗口之间通信等功能。 1、Window 对象 window对象是BOM中最顶层对象&#xff1b;表示…