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。

AC代码:

#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
#define N 200010
#define QLEN 100001
pair<int,int>ed[N];
struct node{
int v,next;
}e[N<<];
int n,m,cnt,S,T,q[N>>],head[N>>],dis[N>>];
bool vis[N];
bool pd(int pos){
for(int i=head[pos];i;i=e[i].next) if(!vis[e[i].v]) return ;//未与终点联通
return ;
}
bool spfa(){//反向走一遍,判断是否有路
q[]=T;
vis[T]=;
int h=,t=;
while(h<t){
if(++h>QLEN) h=;
int p=q[h];//不用vis[p]=0;
for(int i=head[p];i;i=e[i].next){
int v=e[i].v;
if(!vis[v]){
vis[v]=;
if(++t>QLEN) t=;
q[t]=v;
}
}
}
return !vis[S];
}
bool SPFA(){//正向更新最短路(dis[]不用初始化极大值)
q[]=S;
dis[S]=;
int h=,t=;
while(h<t){
if(++h>QLEN) h=;
int p=q[h];//不用vis[p]=0;
if(!pd(p)) continue;
for(int i=head[p];i;i=e[i].next){
int v=e[i].v;
if(!dis[v]){
dis[v]=dis[p]+;
if(++t>QLEN) t=;
q[t]=v;
if(v==T){printf("%d\n",dis[T]);return ;}//有解 输出
}
}
}
return ;
}
void add(int x,int y){
e[++cnt].v=y;
e[cnt].next=head[x];
head[x]=cnt;
}
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++) scanf("%d%d",&ed[i].first,&ed[i].second),add(ed[i].second,ed[i].first);//第一遍反向制表
scanf("%d%d",&S,&T);
if(spfa()){puts("-1");return ;}
memset(head,,sizeof head);//再次初始化
for(int i=;i<=m;i++) add(ed[i].first,ed[i].second);
if(SPFA()){puts("-1");return ;}
return ;
}

洛谷P2296 寻找道路==codevs3731 寻找道路的更多相关文章

  1. 【题解】洛谷P2296 [NOIP2014TG] 寻找道路(SPFA+DFS)

    题目来源:洛谷P2296 思路 一开始看还以为是一道水题 虽然本来就挺水的 本道题的难点在于如何判断是否路径上的点都会直接或者间接连着终点 我们需要在一开始多建一个反向图 然后从终点DFS回去 把路径 ...

  2. 洛谷P5019 [NOIP2018 提高组] 铺设道路

    题目描述 春春是一名道路工程师,负责铺设一条长度为 n 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 n 块首尾相连的区域,一开始,第 i 块区域下陷的深度为 di. 春春每天可以 ...

  3. 洛谷——P2296 寻找道路

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

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

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

  5. 【洛谷P2296】[NOIP2014]寻找道路

    寻找道路 题目链接 这道题非常的水,按照题意, 先反向建边,从终点搜索,标记出可以到达终点的点 然后枚举一遍,判断出符合条件1的点 再从起点搜索一遍就可以了 #include<iostream& ...

  6. AC日记——寻找道路 洛谷 P2296

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

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

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

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

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

  9. [洛谷P2296] NOIP2014 寻找道路

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

随机推荐

  1. docker运行mysql

    http://blog.csdn.net/u011492260/article/details/77970445 第一步: 安装Docker:首先到docker官网下载适合自己电脑当前系统的版本,并安 ...

  2. 代理Delegation

    package com.ctl.test; class Person { private int id; private String name; public int getId() { retur ...

  3. ES6里关于数字的拓展

    一.指数运算符 ES6引入的唯一一个JS语法变化是求幂运算符,它是一种将指数应用于基数的数学运算.JS已有的Math.pow()方法可以执行求幂运算,但它也是为数不多的需要通过方法而不是正式的运算符来 ...

  4. 3D数学读书笔记——矩阵基础番外篇之线性变换

    本系列文章由birdlove1987编写.转载请注明出处. 文章链接:http://blog.csdn.net/zhurui_idea/article/details/25102425 前面有一篇文章 ...

  5. ant create-path 报不允许匹配[xX][mM][1L]错误

    将build.xml配置文件的第一行 <?xml version="1.0" encoding="UTF-8"?> 空格去掉

  6. wmi在渗透测试中的运用

    Abusing WMI to Build a Persistent, Asynchronous, and Fileless Backdoor 滥用 WMI 打造一个永久.异步.无文件后门 http:/ ...

  7. phpcms前台任意代码执行漏洞(php<5.3)

    phpcms v9 中 string2array()函数使用了eval函数,在多个地方可能造成代码执行漏洞 /phpsso_server/phpcms/libs/functions/global.fu ...

  8. Service和Activity交互之广播方式

    一.使用场景如果要通知多个Activity,广播较为适合.但广播较为耗费性能. 二.Broadcast更新Activity中的UI 1.新建一个接口OnUpdateUI,用于回调更新UI public ...

  9. hdu 4865 Peter&#39;s Hobby (隐马尔可夫模型 dp)

    Peter's Hobby Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  10. sone1动态树

    这尼吗桑心病狂的动态树:http://www.lydsy.com/JudgeOnline/problem.php?id=3153 终于让哥以一种碉堡的姿势过了: 牛B轰轰的最后两个都是我的...无法超 ...