反正图两边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】寻找道路的更多相关文章

  1. 洛谷P2296 寻找道路==codevs3731 寻找道路

    P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...

  2. 洛谷——P2296 寻找道路

    P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...

  3. 洛谷P2296 寻找道路 [拓扑排序,最短路]

    题目传送门 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...

  4. [NOIP2014] 提高组 洛谷P2296 寻找道路

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  5. NOIP2014 day2 T2 洛谷P2296 寻找道路

    题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...

  6. 洛谷 [P2296] 寻找道路

    反向BFS预处理,求出所有符合题意的点,再正向BFS,(注意对于边权恒为一的点,BFS,比SPFA高效) 输入时n与m分清 #include <iostream> #include < ...

  7. 洛谷 P2296 寻找道路 —— bfs

    题目:https://www.luogu.org/problemnew/show/P2296 第一次用 Emacs 对拍,写了半天: 注意那个 is 赋值的地方很容易错,千万别反复赋值: 一道水题写了 ...

  8. 洛谷P2296寻找道路

    传送门啦 题目中有一个条件是路径上的所有点的出边所指向的点都直接或间接与终点连通. 所以我们要先判断能否走这一个点, $ bfs $ 类似 $ spfa $ 的一个判断,打上标记. 在这我反向建图,最 ...

  9. 洛谷 P2296 寻找道路【bfs+spfa】

    反向建边bfs出不能到t的点,然后对每个能到这些点的点打上del标记,然后spfa的时候不经过这些点即可 #include<iostream> #include<cstdio> ...

  10. 洛谷P2296 寻找道路_简单BFS

    Code: #include<cstdio> #include<queue> #include<algorithm> using namespace std; co ...

随机推荐

  1. 28. Triangle && Pascal's Triangle && Pascal's Triangle II

    Triangle Given a triangle, find the minimum path sum from top to bottom. Each step you may move to a ...

  2. Flash插件地址

    Flash插件地址: http://get.adobe.com/cn/flashplayer/存档版本地址: http://helpx.adobe.com/flash-player/kb/archiv ...

  3. 无法连接远程SQL Server 数据库的原因

    1. tcp协议开启 2. 1433端口是否添加防火墙例外

  4. 含大量行的订单创建时候creditlimit校验最耗时间

    含大量行的订单创建时候creditlimit校验最耗时间

  5. xml 中转意字符&\/使用方法

    所有 XML 元素都须有关闭标签 在 HTML,经常会看到没有关闭标签的元素: <p>This is a paragraph <p>This is another paragr ...

  6. 在php中写接口时 对json格式的转换 简单的方法

    方法 一 方法二 可以通过urlencode();遍历出来

  7. Mac下导出chrome插件

    chrome最强大的功能之一就是插件,有时候需要给小伙伴们共享一些插件,所以需要将自己chrome中的插件打包,在mac下打包插件还是挺费劲的,在此记录. 打开chrome的扩展程序,找到要导出的插件 ...

  8. findstr 命令

    body { font-family: Bitstream Vera Sans Mono; font-size: 11pt; line-height: 1.5; } html, body { colo ...

  9. UVa 490 - Rotating Sentences

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=94&page=s ...

  10. BootLoader 详解(1)

    1. Boot Loader的概念 BootLoader就是在操作系统内核运行前之前运行的一段小程序.通过这段小程序,可以初始化硬件设备.建立内存空间映射图,从而将系统的软硬件带到一个合适的状态,以便 ...