【洛谷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 ...
随机推荐
- oracle10g在rh6上安装缺少libXtst*的包导致不能出OUI
由于测试需要,今天在linux6.0上装了下oracle10g,确实是知道oracle10g已经不支持redhat5.0以后的版本了,但是根据自己以往在redhat5.0上装oracle的经验就鲁莽下 ...
- IIS7 rename application or site
rename site 比较容易,在IIS里面就可以直接 rename,也可以用 cmd 的方式 1. 打开 cmd 2. cd C:\Windows\System32\inetsrv 3. appc ...
- PreparedStatement解决sql注入问题
总结 PreparedStatement解决sql注入问题 :sql中使用?做占位符 2.得到PreparedStatement对象 PreparedStatement pst=conn.prepar ...
- 2016-08-16: copy-and-swap
#include <algorithm> // std::copy #include <cstddef> // std::size_t #include <stdio.h ...
- 碎片事物的提交 commitAllowingStateLoss()
转:http://blog.csdn.net/kaiqiangzhang001/article/details/42241441 下边两个问题,是在开发中碰到的一些关于Fragment的偶发性的问题, ...
- CentOS和Ubuntu下安装配置Greenplum数据库集群(包括安装包和源码编译安装)
首先说一下,无论是CentOS/RedHat还是Ubuntu都可以按源码方式.安装包方式编译安装. 1. 规划 192.168.4.93(h93) 1个主master 2个主segm ...
- python2.7 爬虫_爬取小说盗墓笔记章节及URL并导入MySQL数据库_20161201
1.爬取页面 http://www.quanshu.net/book/9/9055/ 2.用到模块urllib(网页下载),re正则匹配取得title及titleurl,urlparse(拼接完整ur ...
- javascript中的innerHTML是什么意思,怎么个用法?
innerHTML在JS是双向功能:获取对象的内容 或 向对象插入内容:如:<div id="aa">这是内容</div> ,我们可以通过 document ...
- Python基础(七)内置函数
今天来介绍一下Python解释器包含的一系列的内置函数,下面表格按字母顺序列出了内置函数: 下面就一一介绍一下内置函数的用法: 1.abs() 返回一个数值的绝对值,可以是整数或浮点数等. 1 2 3 ...
- hibernate学习(设计一对一 关系 映射)
//主表 package org.crazy.app.domain; import javax.persistence.*; @Entity @Table(name="person_inf& ...