luoguP2296 寻找道路

因为是出边与终点直接或间接相连,所以将边反向,从终边开始,将所有终边能到达的点都打上标记
因为是最短路,所以不需要处理重边和自环,于是再跑最短路就好
题目关键:
路径上的所有点的出边所指向的点都直接或间接与终点连通
这句话的意识也就是变相的告诉我们,对于一个点x, 他的一条出边连的点y并不能直接或间接的与终点相连,此时我们要给x打上标记
因此,我们在最初从终点开始扫的仅仅是终点能到达的,对于终点不能到达的,我们最后要单独把他们的父节点(方便理解的说法)安排上
但是如果只使用一个标记数组,会出现后效性,所以我们要使用两个标记数组
处理完后跑最短路即可
此题学会的操作:在特定时候,为了简化问题,可以将边反向
此题踩到的雷:kill是关键词,然后吃了两发ce(本来可以1A)
#include<bits/stdc++.h>
#define uint unsigned int
using namespace std;
const int maxm = ;
const int maxn = ;
struct shiki {
int y, net;
}e[maxm];
int lin[maxm], len = ;
int n, m, flag;
int s, t;
bool kil[maxn], vis[maxn];
int dis[maxn]; inline int read() {
int x = , y = ;
char ch = getchar();
while(!isdigit(ch)) {
if(ch == '-') y = -;
ch = getchar();
}
while(isdigit(ch)) {
x = (x << ) + (x << ) + ch - '';
ch = getchar();
}
return x * y;
} inline void insert(int xx, int yy) {
e[++len].net = lin[xx];
e[len].y = yy;
lin[xx] = len;
} void find_your_brother(int t) {
vis[t] = kil[t] = ;
for(int i = lin[t]; i; i = e[i].net)
if(!vis[e[i].y]) find_your_brother(e[i].y);
} queue<int> q;
inline void spfa(int st) {
memset(vis, , sizeof(vis));
memset(dis, 0x3f3f3f, sizeof(dis));
flag = dis[];
q.push(st); vis[st] = , dis[st] = ;
while(!q.empty()) {
int k = q.front(); q.pop();
vis[k] = ;
for(int i = lin[k]; i; i = e[i].net) {
int to = e[i].y;
if(!kil[to]) continue;
if(dis[to] > dis[k] + ) {
dis[to] = dis[k] + ;
if(!vis[to]) {
vis[to] = ;
q.push(to);
}
}
}
}
} int main() {
n = read(), m = read();
for(int i = ; i <= m; ++i) {
int x, y;
x = read(), y = read();
insert(y, x);//反向建边
}
s = read(), t = read();
find_your_brother(t);
for(register uint i = ; i <= n; ++i) {
if(!vis[i])
for(int j = lin[i]; j; j = e[j].net)
if(kil[e[j].y]) kil[e[j].y] = ;
}
spfa(t);
if(dis[s] >= flag) cout << - << '\n';
else cout << dis[s] << '\n';
return ;
}
luoguP2296 寻找道路的更多相关文章
- NOIP2014 寻找道路
2.寻找道路 (road.cpp/c/pas) [问题描述] 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指 ...
- Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组
3731 寻找道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找 ...
- 洛谷P2296 寻找道路 [拓扑排序,最短路]
题目传送门 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- 【DFS】【图论】NOIP2014寻找道路
[NOIP2014]寻找道路 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所 ...
- 【洛谷P2296】[NOIP2014]寻找道路
寻找道路 题目链接 这道题非常的水,按照题意, 先反向建边,从终点搜索,标记出可以到达终点的点 然后枚举一遍,判断出符合条件1的点 再从起点搜索一遍就可以了 #include<iostream& ...
- 洛谷P2296 寻找道路==codevs3731 寻找道路
P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- noip寻找道路
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- 洛谷——P2296 寻找道路
P2296 寻找道路 题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点 ...
- luogu 2296 寻找道路 (搜索)
luogu 2296 寻找道路 题目链接:https://www.luogu.org/problemnew/show/P2296 从终点bfs或者dfs,找出所有终点能到达的点. 然后再从1到n看一下 ...
随机推荐
- 【Cf edu 30 B. Balanced Substring】
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
- 【BZOJ 3165】 [Heoi2013]Segment 李超线段树
所谓李超线段树就是解决此题一类的问题(线段覆盖查询点最大(小)),把原本计算几何的题目变成了简单的线段树,巧妙地结合了线段树的标记永久化与标记下传,在不考虑精度误差的影响下,打法应该是这样的. #in ...
- 用boost::lexical_cast进行数值转换
在STL库中,我们可以通过stringstream来实现字符串和数字间的转换: int i = 0; stringstream ss; ss << "123"; ...
- ubuntu环境配置------增加右键菜单打开terminal
直接安装一个软件包nautilus-open-terminal 终端输入:sudo apt-get install nautilus-open-terminal 重启系统!
- js实现日历
有这样一个普通的日历需求 第一反应就是找插件,结果找到了,但是改起来非常麻烦,然后查下实现的原理,发现原来很简单,于是自己实现了一个. 首先分析一下这个组件,每页显示的是 当前月的所有日期及所占据的行 ...
- Java基础学习知识体系图
- 【uva1380 - 一个调度问题】思路题+树形dp
[题意] 有n<=200个恰好需要一天完成的任务,要求用最少的时间完成所有任务.任务可以同时完成.但是有一些约束,分有向和无向两种,其中A-->B表示A必须在B前面完成,而A--B表示A和 ...
- [bzoj3231][SDOI2008]递归数列——矩阵乘法
题目大意: 一个由自然数组成的数列按下式定义: 对于i <= k:ai = bi 对于i > k: ai = c1ai-1 + c2ai-2 + ... + ckai-k 其中bj和 cj ...
- bzoj 2753 最小生成树变形
我们根据高度建图,将无向边转化为有向边 首先对于第一问,直接一个bfs搞定,得到ans1 然后第二问,我们就相当于要求找到一颗最小生成树, 满足相对来说深度小的高度大,也就是要以高度为优先级 假设现在 ...
- andriod开发增加一个菜单
第一步: E:\01.prj\pyscrapy\Cet4\res\menu\main.xml <menu xmlns:android="http://schemas.android ...