luogu 2296 寻找道路 (搜索)
luogu 2296 寻找道路
题目链接:https://www.luogu.org/problemnew/show/P2296
从终点bfs或者dfs,找出所有终点能到达的点.
然后再从1到n看一下出边是否都与终点相连.
然后对于可行的边,做最短路即可.
因为这里的边权是1,所以bfs即可.
CODE:
#include <iostream>
#include <cstdio>
#include <queue>
const int maxN = 20000 + 7;
const int maxM = 400000 + 7;
using namespace std;
struct Node {
int v,nex;
}Map[maxM];
int head[maxN],num;
bool vis[maxN];
void add_Node(int u,int v) {
Map[++ num] = (Node) {v,head[u]};
head[u] = num;
return ;
}
struct Node_2 {
int v,nex;
}Map_2[maxM];
int num_2,head_2[maxN],dep[maxN];
bool vis2[maxN];
void add_Node2(int u,int v) {
Map_2[++ num_2] = (Node_2) {v,head_2[u]};
head_2[u] = num_2;
return ;
}
queue<int> q;
inline int read() {
int x = 0,f = 1;char c = getchar();
while(c < '0' || c > '9') {if(c == '-')f = -1;c = getchar();}
while(c >= '0' && c <= '9') {x = x * 10 + c - '0';c = getchar();}
return x * f;
}
int main() {
int n,m,s,t,u,v;
n = read();m = read();
while(m --) {
u = read();v = read();
add_Node2(u,v);
add_Node(v,u);
}
s = read();t = read();
vis[t] = true;
q.push(t);
while(!q.empty()) {
u = q.front();q.pop();
for(int i = head[u];i;i = Map[i].nex) {
v = Map[i].v;
if(!vis[v]) {
vis[v] = true;
q.push(v);
}
}
}
for(int i = 1;i <= n;++ i) {
if(!vis[i]) vis2[i] = true;
for(int j = head_2[i];j;j = Map_2[j].nex) {
int v = Map_2[j].v;
if(!vis[v]) vis2[i] = true;
}
}
dep[t] = 1;
q.push(t);
while(!q.empty()) {
int p = q.front();q.pop();
for(int i = head[p];i;i = Map[i].nex) {
int v = Map[i].v;
if(!dep[v] && !vis2[v]) {
q.push(v);
dep[v] = dep[p] + 1;
}
}
}
printf("%d",dep[s] == 0 ? -1 : dep[s] - 1);
return 0;
}
luogu 2296 寻找道路 (搜索)的更多相关文章
- Luogu 2296 寻找道路
https://www.luogu.org/problemnew/show/2296 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以 ...
- luogu 2296 寻找道路 简单BFS
简单的BFS,练习基础 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #defi ...
- 【luogu P2296 寻找道路】 题解
题目链接:https://www.luogu.org/problemnew/show/P2296 题意:给定起点终点,找一条从起点到终点的最短路径使路上的每个点都能有路径到达终点. 我们先反着建一遍图 ...
- luogu P2296 寻找道路
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- [NOIp2014] luogu P2296 寻找道路
不知道是因为我菜还是别的,最近老是看错题. 题目描述 在有向图 GGG 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向 ...
- luogu P2296 寻找道路 |最短路
题目描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件 1 的 ...
- LUOGU P2296 寻找道路 (noip 2014)
传送门 解题思路 首先建一张反图,从终点dfs出哪个点直接或间接相连,然后直接跑最短路,跑的时候判断一下所连的点是否与终点相连. 代码 #include<iostream> #includ ...
- NOIP2014 寻找道路
2.寻找道路 (road.cpp/c/pas) [问题描述] 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指 ...
- 【洛谷P2296】[NOIP2014]寻找道路
寻找道路 题目链接 这道题非常的水,按照题意, 先反向建边,从终点搜索,标记出可以到达终点的点 然后枚举一遍,判断出符合条件1的点 再从起点搜索一遍就可以了 #include<iostream& ...
随机推荐
- “我要点爆”微信小程序云开发实例
使用云开发进行微信小程序“我要点爆”的制作 下一章:“我要点爆”微信小程序云开发之项目建立与我的页面功能实现 接下来我将对“我要点爆”微信小程序进行完整的开源介绍 小程序名称: 我要点爆 查看方式:从 ...
- 51Nod 1126 求递推序列的第N项(矩阵快速幂)
#include <iostream> #include <algorithm> #include <cmath> #define MOD 7 #define N ...
- js-metisMenu
metisMenu是js的菜单插件,可以实现可折叠的二级菜单效果. 1 bootstrap折叠(Collapse) 直接引用bootstrap.js或者bootstrap.min.js就可以支持该插件 ...
- 未能载入软件包“WebDriverAgentRunner”,因为它已损坏或丢失必要的资源。
添加 YYCache.framework RoutingHTTPServer.framework
- scrapy分布式原理
scrapy分布式原理 关于Scrapy工作流程回顾 Scrapy单机架构 上图的架构其实就是一种单机架构,只在本机维护一个爬取队列,Scheduler进行调度,而要实现多态服务器共同爬取数据关键 ...
- AKOJ-1265-输出二叉树
链接:https://oj.ahstu.cc/JudgeOnline/problem.php?id=1265 题意: 我们知道二叉树的先序序列和中序序列或者是中序和后序能够唯一确定一颗二叉树.现在给一 ...
- HDU3853(期望)
题目很水了,但是原地打转的点……虽然不难想到这个坑,但是从数学的角度来讲期望不应该算正无穷嘛……为什么算0啊? ; ; int R, C; struct gird { db ori, right, d ...
- UVa12186:Another Crisis(树形DP)
一道简单的树形DP送给你. A couple of years ago, a new world wide crisis started, leaving many people with econo ...
- 理解C#系列 / 前言
前言 索引 写什么? 为什么写? 怎么写? 写什么? 写和C#编程相关的知识. 写知识的定义,附加对知识的理解. 写知识的作用,使用的场景,使用的条件. 写知识的本质,技术的结构,工作的原理. 写知识 ...
- 几款LINUX下的CHM查看器
转帖地址:http://blog.csdn.net/aking21alinjuju/article/details/4436440 本文旨在介绍linux下的常见chm阅读软件及其安装,并针对一些问题 ...