【洛谷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 ...
随机推荐
- eclipse将编辑栏一分为二
今天无意中发现一个MyEclipse的功能,CTRL SHIF - 三个键一起按下时,同一个编辑窗口会一分为二.这样我们写下面代码需要参考前面代码的时候就很方便了.
- 【转】windows7 修改环境变量 和 用不用重启电脑的讨论
原文:http://www.cnblogs.com/zhenmingliu/archive/2013/02/21/2921396.html 先到我的电脑>属性>高级>环境变量 ...
- Android UI 绘制过程浅析(一)LayoutInflater简介
前言 这篇blog是我在阅读过csdn大牛郭霖的<带你一步步深入了解View>一系列文章后,亲身实践并做出的小结.作为有志向的前端开发工程师,怎么可以不搞懂View绘制的基本原理——简直就 ...
- AX2012 referencegroup
用referencegroup 1.添加EDT,refrecid 2.修改autoidentification 3. 可以直接拖refrecid字段出来,就是referencegroup了
- delphi action学习
procedure TEditAction.UpdateTarget(Target: TObject); begin if (Self is TEditCut) then Enabled := (Ge ...
- c++的类与对象
对象:此对象,非彼对象,:-D,跟妹子无关(不过貌似也可以,,),闲言少叙,书归正传 我们可以把我们见到的一切事物都称为对象.它可以有形,可以无形,可以简单,可以复杂,但是对某一种具体的对象,比如公司 ...
- jquery源码学习之queue方法
队列模块的代码结构 静态方法jQuery下有queue,dequeue,_queueHooks这三种方法:静态方法不建议直接在外部调用: 实例方法.queue,.dequeue,.clearQueue ...
- WebForm ASP开发方式、 IIS服务器以及WebForm开发基础
网页端 B/S两种:(ASP.NET --网站应用开发技术) WebForm: 微软最先出现的网站开发技术 MVC: 后来开发,为了让java.PHP转过来的开发人员更容易接受使用 客户端 C/ ...
- DetailsView的添加,修改,删除,查询
前台代码: <div> <asp:DetailsView ID="gvDepart" runat="server" AutoGenerateR ...
- 第1章 C#类型基础
1.1值类型和引用类型 1.1.1 值类型 使用值类型之前需要对值类型的所有元素初始化(普通值类型和结构体). 结构还有一个特性:调用结构上的方法前,需要对其所有的字段进行赋值,为了避免对结构体中所有 ...