P2296 寻找道路


题目描述

在有向图 \(G\) 中,每条边的长度均为 \(1\) ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件:

  • 路径上的所有点的出边所指向的点都直接或间接与终点连通。
  • 在满足上一个条件的情况下使路径最短。

注意:图 \(G\) 中可能存在重边和自环,题目保证终点没有出边。

请你输出符合条件的路径的长度。


这一道算是一个模板的变形吧

我们现将能够到达终点的点判断出来。

然后从中选出所指向的点都能到达终点的点

最后跑一个bfs就行了(前面几个不都是跑bfs么!!!)

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<queue>
using std::queue;
const int max_M=201000;
const int max_N=11000;
int n,m,s,t;
struct node
{int point;int nxt;
};
node line[max_M],Line[max_M];
int head[max_N],Head[max_N],tail,Tail;
void add(int a,int b)
{line[++tail].point=b;line[tail].nxt=head[a];head[a]=tail;Line[++Tail].point=a;Line[Tail].nxt=Head[b];Head[b]=Tail;
}
bool reach[max_N];
bool use[max_N];
void R_bfs(int start)
{reach[start]=true;queue<int>q;q.push(start);while(!q.empty()){int now=q.front();q.pop();for(int i=Head[now];i;i=Line[i].nxt)if(!reach[Line[i].point]){reach[Line[i].point]=true;q.push(Line[i].point);}}for(int i=1;i<=n;i++){use[i]=true;for(int j=head[i];j;j=line[j].nxt)if(!reach[line[j].point]){use[i]=false;break;}if(!head[i])    use[i]=false;}
}
int ans;
int dis[max_N];
void bfs(int start)
{if(!reach[t]){ans=-1;return ;}use[t]=true;for(int i=1;i<=n;i++)   dis[i]=0x7fffffff;dis[start]=0;queue<int>q;q.push(start);while(!q.empty()){int now=q.front();q.pop();for(int i=head[now];i;i=line[i].nxt)if(dis[line[i].point]>dis[now]+1&&use[line[i].point]){dis[line[i].point]=dis[now]+1;q.push(line[i].point);}}ans=dis[t] == 0x7fffffff ? -1 : dis[t] ;return ;
}
int main()
{scanf("%d%d",&n,&m);int a,b;for(int i=1;i<=m;i++){scanf("%d%d",&a,&b);add(a,b);}scanf("%d%d",&s,&t);R_bfs(t);bfs(s);printf("%d",ans);
}

转载于:https://www.cnblogs.com/Lance1ot/p/9378251.html

P2296 寻找道路相关推荐

  1. 1807. [NOIP2014]寻找道路P2296 寻找道路

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

  2. 洛谷 P2296 寻找道路

    感慨 周五比赛的测试题,结果到比赛结束也没有读懂题意...给的样例太少了,我一直以为我是不是spfa敲错了...没想到中间还有卡的地方 分析 题目中的一句耐人寻味的话"路径上的所有点的出边所 ...

  3. LUOGU P2296 寻找道路 (noip 2014)

    传送门 解题思路 首先建一张反图,从终点dfs出哪个点直接或间接相连,然后直接跑最短路,跑的时候判断一下所连的点是否与终点相连. 代码 #include<iostream> #includ ...

  4. NOIP2014洛谷P2296:寻找道路(bfs)

    解析 杀鸡焉用AS47 做的巨差的一道题 WA3遍+写的巨麻烦+复杂度被吊打 qwq 说起来很玄学,但第一交之前就有一种强烈的预感觉得自己会WA 一开始像个傻子一样对有环图上记搜 WA了还不知道为啥- ...

  5. Luogu 2296 寻找道路

    https://www.luogu.org/problemnew/show/2296 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以 ...

  6. 洛谷2296 寻找道路

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

  7. [NOIP2014] 寻找道路

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

  8. NOIP2014 寻找道路

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

  9. 寻找道路(codevs 3731)题解

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

最新文章

  1. Linux vim 中文显示乱码解决方法
  2. 老大,我就想加个索引,怎么就这么难?
  3. linear model课程笔记
  4. 事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
  5. js 中的[] {}是什么意思
  6. hdu 4291 矩阵幂 循环节
  7. 怎么break java8 stream的foreach
  8. spring json
  9. python编程大赛队名_团队作业1——团队展示选题
  10. 我喜欢构建器模式的三个原因
  11. Opencv实战【1】人脸检测并对ROI区域进行部分处理(变身乔碧萝!!!)
  12. C++ 控制结构和函数(二) —— 函数I(Functions I)
  13. js中报错 ajax不存在,AJAX
  14. 灰度测试或 AB 测试
  15. 美国杜克大学计算机专业世界排名,美国杜克大学世界排名是多少呢?
  16. 【百度春招】 买帽子
  17. Redis的优点和缺点
  18. find missing conjunction, why?
  19. 李彦宏:有人弄死其他对手 自己也没好结果
  20. python一种基于电脑mac地址的加密算法

热门文章

  1. 产品固件(系统)升级——curl/wget
  2. GIT 查看/修改用户名和邮箱地址
  3. 女生可不可以进入IT行业做Linux运维工程师?
  4. [ZT]CCNA课堂精简笔记 2
  5. 诊断Oracle 服从成绩
  6. mysql命令成功数值不变_MySQL基础知识精华汇总_3(mysql基础命令操作)
  7. php session 不通过cookie_PHP会话控制机制中,Cookie和Session的应用,你更喜欢谁
  8. z tree 如何把选中的节点保存为标准的json格式_为什么MongoDB使用B-Tree?
  9. 怎么捡自己空投_绝地求生:如何用纸皮自制空投?只需2个道具即可完成,附带教程...
  10. python字符串驻留机制_Python中的字符串驻留