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& ...
随机推荐
- 如何找出nginx配置文件的所在位置?
对于一台陌生的服务器或安装太久忘了位置,怎么才能简单快速的找到配置文件的位置呢?要找出配置文件的位置,需要先找出nginx可执行文件的路径 , 这里有几种方法: 1.如果程序在运行中 ps -ef | ...
- dumpe2fs: Bad magic number in super-block
今天使用tune2fs和dumpe2fs来查看文件系统信息,出现如下图所示错误提示: 解决方法: 1.原来tune2fs和dumpe2fs只能打开ext3/ext4等文件类型. dumpe2fs - ...
- 51Nod 1043 幸运号码
#include <stdio.h> #include <algorithm> using namespace std; typedef long long ll; ; ][] ...
- 10M光纤与下载速度KB/s、MB/s的换算
我们经常听说谁开的宽带是4M或10M或20M等等.那这和我们所说的网速“多少MB/s”.“多少KB/s”等同吗? 其实这不是一个概念. 在宽带运营商那里开的宽带,比如4M,其实是说4M bit/s,即 ...
- IM 通讯录
wkt-4024 6720
- 转 如何快速清理 chrom 缓存
谷歌浏览器(Chrome)如何手动清除缓存 听语音 | 浏览:13267 | 更新:2014-05-15 01:00 | 标签:谷歌 chrome 浏览器的缓存可以帮助我们更好地使用一些程序,但时间长 ...
- dispaly:none 和visibility :hidden的区别
display:none 通常被 JavaScript 用来在不删除元素的情况下隐藏或显示元素. 它和 visibility 属性不一样.把 display 设置成 none 元素不会占据它本来应该显 ...
- Y2分班考试 笔试题总结
1. 此题编译错误 base无法点出methodB()方法 2. 第二题选C 3.此题选D:正确的输出级别为fatal>error>warn>info>debug 4. 此题 ...
- Java编程基础-方法
1.方法(函数)概要 (1).含义:方法(函数)就是定义在类中的具有特定功能的一段独立小程序. (2).方法定义的语法格式: 修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参 ...
- 介绍hadoop的好文章
http://www.centoscn.com/image-text/install/2014/1121/4158.html http://www.cnblogs.com/xia520pi/categ ...