【洛谷P2296】寻找道路
反正图两边bfs
#include<iostream>
#include<cstdio>
#include<queue> using namespace std; inline int readint(){
int x=,f=;
char ch=getchar();
while (ch<''||ch>''){
if (ch=='-') f=-;
ch=getchar();
}
while (ch>=''&&ch<=''){
x=(x<<)+(x<<)+ch-'';
ch=getchar();
}
return x*f;
}
struct edge{
int x,nxt;
}e1[],e2[]; int n,m,s,t,t1,t2,kk,inq[],v[],tmp,sg=,v2[],v1[],cnt,head1[],head2[];
struct node{
int x,p;
}now;
inline void adde1(int a,int b){
++cnt;
e1[cnt].x=b;
e1[cnt].nxt=head1[a];
head1[a]=cnt;
}inline void adde2(int a,int b){
++cnt;
e2[cnt].x=b;
e2[cnt].nxt=head2[a];
head2[a]=cnt;
}
queue <node> q;
queue <int> qq;
int main(){
n=readint();
m=readint();
for (int i=;i<=m;++i){
t1=readint();
t2=readint();
adde1(t1,t2);
adde2(t2,t1);
}
s=readint();
t=readint();
kk=t;
inq[kk]=;
qq.push(kk);
while (!qq.empty()){
kk=qq.front();
qq.pop();
inq[kk]=;
v1[kk]=;
for (int i=head2[kk];i;i=e2[i].nxt){
tmp=e2[i].x;
if ((!inq[tmp])&&(!v1[tmp])) qq.push(tmp);
}
}
for (int i=;i<=n;++i) v[i]=v1[i];
for (int i=;i<=n;++i) {
if (v1[i]==) {
v[i]=;
for (int j=head2[i];j;j=e2[j].nxt){
v[e2[j].x]=;
}
} }
q.push((node){s,});
while (!q.empty()){
now=q.front();
q.pop();
v2[now.x]=;
if (now.x==t) printf("%d",now.p),sg=;
if (sg==) break;
for (int i=head1[now.x];i;i=e1[i].nxt){
tmp=e1[i].x;
if (v[tmp]==&&v2[tmp]==) {
q.push((node){tmp,now.p+});
}
}
}
if (sg==) printf("-1\n");
}
STD
【洛谷P2296】寻找道路的更多相关文章
- 洛谷P2296 寻找道路==codevs3731 寻找道路
P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- 洛谷——P2296 寻找道路
P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- 洛谷P2296 寻找道路 [拓扑排序,最短路]
题目传送门 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- [NOIP2014] 提高组 洛谷P2296 寻找道路
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- NOIP2014 day2 T2 洛谷P2296 寻找道路
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- 洛谷 [P2296] 寻找道路
反向BFS预处理,求出所有符合题意的点,再正向BFS,(注意对于边权恒为一的点,BFS,比SPFA高效) 输入时n与m分清 #include <iostream> #include < ...
- 洛谷 P2296 寻找道路 —— bfs
题目:https://www.luogu.org/problemnew/show/P2296 第一次用 Emacs 对拍,写了半天: 注意那个 is 赋值的地方很容易错,千万别反复赋值: 一道水题写了 ...
- 洛谷P2296寻找道路
传送门啦 题目中有一个条件是路径上的所有点的出边所指向的点都直接或间接与终点连通. 所以我们要先判断能否走这一个点, $ bfs $ 类似 $ spfa $ 的一个判断,打上标记. 在这我反向建图,最 ...
- 洛谷 P2296 寻找道路【bfs+spfa】
反向建边bfs出不能到t的点,然后对每个能到这些点的点打上del标记,然后spfa的时候不经过这些点即可 #include<iostream> #include<cstdio> ...
- 洛谷P2296 寻找道路_简单BFS
Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; co ...
随机推荐
- mybatis oracle insert 返回新增的主键值
<insert id="insertVmsTemplatePlayItem" parameterType="VmsTemplatePlayItem"> ...
- 【原】Windows下常用命令
1.小技巧 打开"运行"对话框(Win+R),输入cmd,打开控制台命令窗口... 也可以通过cmd /c 命令 和 cmd /k 命令的方式来直接运行命令 注:/c表示执行完命令 ...
- POS管理系统之新增设备入库
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...
- linux 查找目录或文件
查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查找关键字 ·find path -option [ -print ] [ ...
- (转)这个API很“迷人”——新的Fetch API
原文:https://hacks.mozilla.org/2015/03/this-api-is-so-fetching 原标题是This API is So Fetching,Fetching也可以 ...
- IT在线笔试总结(一)
综述:IT公司的技术类笔试,主要考察: (1)知识面的广度.主要考察一些业内通用性的知识,以及某一职务所必须具备的业务知识. (2)智力测试.主要考察记忆力,思维能力和学习新知识的能力. (3)技能测 ...
- rtmp拉流测试工具
http://www.cutv.com/demo/live_test.swf ================================================== ========== ...
- CentOS7服务器相关配置
====================查看CentOS版本==================== cat /etc/redhat-release ====================YUM更新 ...
- Queue、进程、线程、协程
参考博客地址 http://www.cnblogs.com/alex3714/articles/5230609.html 1.python GIL全局解释器锁 python调用的操作系统的原生线程,当 ...
- [python] import curses
python 中,我们使用 curses.wrapper 来创建终端交互window.使用 stdscr 来代表 window 对象. 使用方法: from curses import wrapper ...