洛谷 题解 P2296 【寻找道路】
Problem
solution
首先声明,这题我用了spfa,而:
关于spfa:它死了。
杀手: NOI 2018−T1 出题人
感谢出题人,没有卡spfa
- 用时: 20ms
- 空间: 5082KB(4.74MB)
- 代码长度: 3.32KB
- 提交记录: R9776986
先说思路:
- 首先,要处理出哪些点不能直接或间接与终点连通
- 函数:
void live(void)
- 这里的方法是建反图跑spfa
- 不能直接或间接与终点连通的点存在
temp_alive
数组里,1
为活着,0
为死了
- 函数:
- 其次,要把所有指向
不能直接或间接与终点连通的那些点
的那些点设置为死了
- 在函数
live()
里执行 - 存到
alive
数组,1
为活着,0
为死了 - 注意:第二步的结果不能直接直接存储在第一步的数组里,否则会
杀掉一些有用的点
- 在函数
- 一遍spfa求最短路,求的过程中排除所有那些
的点。死了
- 函数:
void spfa(void)
- 注意路径长度均为
1
- 函数:
- 完结散花♪(^∇^*)
Code
- // luogu-judger-enable-o2
- /*
- Problem: P2296 【寻找道路】
- Author: 航空信奥
- Date: 2018/08/16
- */
- #include <stdio.h>
- #include <string.h>
- #include <vector>
- #include <queue>
- #define Clear(a, x) memset(a, x, sizeof(a))
- using namespace std;
- namespace hkxa { /* 防重名 */
- inline char Getchar();
- template <typename _TpInt> inline _TpInt read();
- template <typename _TpInt> inline void write(_TpInt x);
- # define Max_N
- vector<int> to[Max_N];
- vector<int> fr[Max_N]; /* 反图 */
- int n, m;
- int start, finish;
- bool alive[Max_N] = {};
- int dis[Max_N] = {};
- void live()
- {
- bool temp_alive[Max_N] = {};
- queue <int> q;
- q.push(finish);
- temp_alive[finish] = ;
- int point;
- while (!q.empty()) {
- point = q.front();
- q.pop();
- for (int i = ; i < fr[point].size(); i++) {
- if (!temp_alive[fr[point][i]]) {
- q.push(fr[point][i]);
- temp_alive[fr[point][i]] = ;
- }
- }
- }
- Clear(alive, );
- for (int i = ; i <= n; i++) {
- if (!temp_alive[i]) {
- alive[i] = ;
- for (int j = ; j < fr[i].size(); j++) {
- alive[fr[i][j]] = ;
- }
- }
- }
- }
- void spfa()
- {
- Clear(dis, 0x3f);
- dis[start] = ;
- queue <int> q;
- q.push(start);
- int point;
- while (!q.empty()) {
- point = q.front();
- q.pop();
- for (int i = ; i < to[point].size(); i++) {
- if (alive[to[point][i]] && dis[point] + < dis[to[point][i]]) {
- q.push(to[point][i]);
- dis[to[point][i]] = dis[point] + ;
- }
- }
- }
- }
- int main()
- {
- n = read<int>();
- m = read<int>();
- int f, t;
- for (int i = ; i < m; i++) {
- f = read<int>();
- t = read<int>();
- to[f].push_back(t);
- fr[t].push_back(f);
- }
- start = read<int>();
- finish = read<int>();
- live();
- spfa();
- if (dis[finish] == 0x3f3f3f3f)
- dis[finish] = -;
- write(dis[finish]);
- puts("");
- return ;
- }
- char BufferRead[ << ];
- int rLen = , rPos = ;
- inline char Getchar()
- {
- if (rPos == rLen) rPos = , rLen = fread(BufferRead, , << , stdin);
- if (rPos == rLen) return EOF;
- return BufferRead[rPos++];
- }
- template <typename _TpInt>
- inline _TpInt read()
- {
- register int flag = ;
- register char c = Getchar();
- while ((c > '' || c < '') && c != '-')
- c = Getchar();
- if (c == '-') flag = -, c = Getchar();
- register _TpInt init = (c & );
- while ((c = Getchar()) <= '' && c >= '')
- init = (init << ) + (init << ) + (c & );
- return init * flag;
- }
- template <typename _TpInt>
- inline void write(_TpInt x)
- {
- if (x < ) {
- putchar('-');
- write<_TpInt>(~x + );
- }
- else {
- if (x > ) write<_TpInt>(x / );
- putchar(x % + '');
- }
- }
- }
- int main()
- {
- hkxa::main();
- return ;
- }
洛谷 题解 P2296 【寻找道路】的更多相关文章
- 洛谷P2296 寻找道路==codevs3731 寻找道路
P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- 洛谷——P2296 寻找道路
P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- 洛谷P1462-通往奥格瑞玛的道路-二分+最短路
洛谷P1462-通往奥格瑞玛的道路 题目描述 在艾泽拉斯,有\(n\)个城市.编号为\(1,2,3,...,n\). 城市之间有\(m\)条双向的公路,连接着两个城市,从某个城市到另一个城市,会遭到联 ...
- DP【洛谷P1704】 寻找最优美做题曲线
[洛谷P1704] 寻找最优美做题曲线 题目背景 nodgd是一个喜欢写程序的同学,前不久(好像还是有点久了)洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情, ...
- 洛谷P1462 通往奥格瑞玛的道路(二分+spfa,二分+Dijkstra)
洛谷P1462 通往奥格瑞玛的道路 二分费用. 用血量花费建图,用单源最短路判断 \(1\) 到 \(n\) 的最短路花费是否小于 \(b\) .二分时需要不断记录合法的 \(mid\) 值. 这里建 ...
- 洛谷P2296 寻找道路 [拓扑排序,最短路]
题目传送门 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- 洛谷 题解 UVA572 【油田 Oil Deposits】
这是我在洛谷上的第一篇题解!!!!!!!! 这个其实很简单的 我是一只卡在了结束条件这里所以一直听取WA声一片,详细解释代码里见 #include<iostream> #include&l ...
- 洛谷 题解 P1600 【天天爱跑步】 (NOIP2016)
必须得说,这是一道难题(尤其对于我这样普及组205分的蒟蒻) 提交结果(NOIP2016 天天爱跑步): OJ名 编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间 Libre ...
- 洛谷P4319 变化的道路
题意:给定图,每条边都有一段存在时间.求每段时间的最小生成树. 解:动态MST什么毒瘤...洛谷上还是蓝题... 线段树分治 + lct维护最小生成树. 对时间开线段树,每条边的存在时间在上面会对应到 ...
随机推荐
- [多态] java笔记之多态性
1.多态,说的是对象,说的不是类. 2. 3.多态 = polymorphism 4. 调用如下: 5. 6.口诀: 7.对象的向上转型: 8.对象的向下转型: 9.下面这个异常叫做ClassCast ...
- nyoj 21-三个水杯(BFS)
21-三个水杯 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:7 submit:18 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装 ...
- [ubuntu篇] 使用Hexo建立个人博客,自定义域名https加密,搜索引擎google,baidu,360收录
为了更好的阅读体验,欢迎阅读原文.原文链接在此. Part 1: Using Github Pages and Hexo to manage personal blogs. Series Part 1 ...
- 报错:尝试加载 Oracle 客户端库时引发 BadImageFormatException。如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题。
问题: 在写windows服务时,发布后日志报错:尝试加载 Oracle 客户端库时引发 BadImageFormatException.如果在安装 32 位 Oracle 客户端组件的情况下以 64 ...
- cognos服务器性能测试诊断分析优化过程记录
前段时间客户方一个系统上线后出现性能问题,就是查询报表的时候出现宕机现象,应项目组要求过去帮忙测试优化问题. 该项目的架构相对比较复杂,登录后要先进行认证服务器认证用户然后登录到应用系统A,在跳转到 ...
- Redis集群同步问题
之前被面试官问到:Redis集群中主从数据同步是从库异步读取主库,那么Redis集群其他主与主之间的数据是怎么共享的呢?或者说是怎么同步的? emmmm……当时我就懵逼了,这不是考试范围啊卧槽~只能老 ...
- PIC18F45K80串口1和串口2异步收发通信实例
PIC18F45K80串口1和串口2异步收发通信实例 一:配置串口1初始化函数 首先打开技术手册,查看异步串口的操作流程以及配置. 需要将串口对应引脚的方向寄存器设置为输入
- Mysql查询语句之排序查询
语法: /* select 查询列表 from 表 [where 筛选条件] order by 排序列表 [asc/desc] */ ①asc为升序,desc为降序,且默认为升序 ②order by子 ...
- 关于vue中的videoPlayer的src视频地址参数动态修改(网上一堆错误方法,被误导很久,自己找到了正确的方法,供大家借鉴)
方法很简单:相信大家的问题应该是改变src的值吧,动态赋值这一步简单.this.playerOptions['sources'][0]['src'] 就是这一步解决提取src问题,主要部分用绿色框起来 ...
- 通过Python将Excel表格信息导入数据库
前言 公司原采用Excel表格方式记录着服务器资产信息,随着业务的增加,相应的硬件资产也增加,同时物理机虚拟化出多台虚拟机,存在表格管理杂乱.变更资产信息不能及时相互同步, 为了紧跟时代的步伐,老大搞 ...