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. Eclipse下的java工程目录

    对新手来讲,一个Java工程内部的多个文件夹经常会让大家困惑.更可恶的是莫名其妙的路径问题,在Eclipse编写Java程序中,出现频率最高的错误很可能就是路径问题. 这些问题原因其实都是一个,就是关 ...

  2. remmina rdp远程连接windows

    一.remmina rdp远程连接windows sudo apt-get install remmina 二.ubuntu设置桌面快捷方式 ①找到Remmina远程桌面客户端 比如在[搜索您的本地和 ...

  3. JS方面重点摘要(二)

    1.函数声明与函数表达式 (1)变量声明会置顶提前,但赋值仍在原地方(2)函数声明同变量声明一样会提前:但是,函数表达式没有提前,就相当于平时的变量赋值(3)函数声明会覆盖变量声明,但不会覆盖变量赋值 ...

  4. XShell命令行使用

    1.建立连接: 2.查看总体目录: 3.查看对应服务目录: 4.删除对应jar包后,再查看目录下文件: 5.上传对应的jar文件: 6.重启服务 7.查看服务日志: 8.mv old-name new ...

  5. python git log

    # -*- coding: utf-8 -*- # created by vince67 Feb.2014 # nuovince@gmail.com   import re import os imp ...

  6. java 过滤器(Filter)与springMVC 拦截器(interceptor)的实现案例

    java 过滤器Filter: package com.sun.test.aircraft.filter;import javax.servlet.*;import java.io.IOExcepti ...

  7. Java.lang.NoClassDefFoundError--找不到相应的类

    如题Java.lang.NoClassDefFoundError 错误可能是由于找不到指定的类引起的. 一般出现在java 反射调用,或者通过jniRegisterNativeMethods手动注册j ...

  8. mac os x+paralles使用source insight

    将Mac OS X下的目录共享到Paralles后,source insight创建工程.但是当再次打开时却打开失败.提示:there was an error opening project 网上对 ...

  9. ionic准备之angular基础———服务provider 和 factory和service(9)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. linger博客原创性博文导航

    linger博客原创性博文导航 http://blog.csdn.net/lingerlanlan 大学研究游戏外挂技术開始了此博客.断断续续写了些博文. 后来,開始机器学习和深度学习的研究工作,因为 ...