[NOIP 2014] 寻找道路
[题目链接]
[算法]
首先,在反向图上从终点广搜,求出每个点是否可以在答案路径中
然后在正向图中求出源点至终点的最短路,同样可以使用广搜
时间复杂度 : O(N)
[代码]
#include<bits/stdc++.h>
using namespace std;
#define MAXN 10010
#define MAXM 200010 struct edge
{
int to,nxt;
} e[MAXM << ]; int i,n,m,u,v,s,t,tot;
int head[MAXN],rhead[MAXN],deg[MAXN];
bool flag[MAXN]; namespace IO
{
template <typename T> inline void read(T &x)
{
int f = ; x = ;
char c = getchar();
for (; !isdigit(c); c = getchar())
{
if (c == '-') f = -f;
}
for (; isdigit(c); c = getchar()) x = (x << ) + (x << ) + c - '';
x *= f;
}
template <typename T> inline void write(T x)
{
if (x < )
{
putchar('-');
x = -x;
}
if (x > ) write(x / );
putchar(x % + '');
}
template <typename T> inline void writeln(T x)
{
write(x);
puts("");
}
} ;
inline void addedge(int u,int v)
{
tot++;
e[tot] = (edge){v,head[u]};
head[u] = tot;
}
inline void addredge(int u,int v)
{
tot++;
e[tot] = (edge){v,rhead[u]};
rhead[u] = tot;
}
inline void bfs1(int s)
{
int i,u,v,l,r;
static int q[MAXN],cnt[MAXN];
static bool visited[MAXN];
for (i = ; i <= n; i++) cnt[i] = ;
q[l = r = ] = s;
flag[s] = true;
while (l <= r)
{
u = q[l];
l++;
for (i = rhead[u]; i; i = e[i].nxt)
{
v = e[i].to;
if (!visited[v])
{
visited[v] = true;
q[++r] = v;
}
cnt[v]++;
}
}
for (i = ; i <= n; i++) flag[i] = (cnt[i] == deg[i]);
}
inline int bfs2(int s)
{
int i,u,v,l,r;
static int q[MAXN],dist[MAXN];
static bool visited[MAXN];
if (!flag[s]) return -;
for (i = ; i <= n; i++) visited[i] = false;
q[l = r = ] = s;
dist[s] = ;
visited[s] = true;
while (l <= r)
{
u = q[l];
l++;
for (i = head[u]; i; i = e[i].nxt)
{
v = e[i].to;
if (!visited[v] && flag[v])
{
visited[v] = true;
dist[v] = dist[u] + ;
q[++r] = v;
}
}
}
return dist[t] > ? dist[t] : -;
} int main()
{ IO :: read(n); IO :: read(m);
for (i = ; i <= m; i++)
{
IO :: read(u); IO :: read(v);
addedge(u,v);
addredge(v,u);
deg[u]++;
}
IO :: read(s); IO :: read(t);
bfs1(t);
IO :: writeln(bfs2(s)); return ; }
[NOIP 2014] 寻找道路的更多相关文章
- [Luogu P2296][NOIP 2014]寻找道路
emmm交了第8次才过. 这道题目测一道单源最短路问题,因此dijkstra或者spfa板子先准备好.因为题中对最短路有限定: 路径上的所有点的出边所指向的点都直接或间接与终点连通. 在满足条件1的情 ...
- NOIp 2014 寻找道路【图的遍历/最短路】By cellur925
题目传送门 比较裸的图论,结果自己还是没做出来,我真菜. 我们根据题意,只要把不能通向终点的点求出,然后再分别以这些点为起点,求出它们能到达的点,这些点也不能在路径上. 之后跑一个最短路即可. 注意以 ...
- niop 2014寻找道路
/* 乍一看就是个最短路 SFPA 但是要保证路径上的所有点的出边所指向的点都直接或间接与终点连通. 这一点就蛋疼了0.0 开始想的是正着跑一边 每一个点的所有边都能符合条件 那这个点就符合条件0.0 ...
- Codevs 3731 寻找道路 2014年 NOIP全国联赛提高组
3731 寻找道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找 ...
- noip寻找道路
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- NOIP2014 寻找道路
2.寻找道路 (road.cpp/c/pas) [问题描述] 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指 ...
- NOIP 2014 提高组 题解
NOIP 2014 提高组 题解 No 1. 生活大爆炸版石头剪刀布 http://www.luogu.org/problem/show?pid=1328 这是道大水题,我都在想怎么会有人错了,没算法 ...
- NOIP 2014
Prob.1 生活大爆炸版 石头剪刀布 模拟.代码: #include<cstdio> #include<cstring> #include<iostream> u ...
- Luogu 1351 NOIP 2014 联合权值(贪心,计数原理)
Luogu 1351 NOIP 2014 联合权值(贪心,计数原理) Description 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi, ...
随机推荐
- javascript部分知识点
1:script放置位置: a:<title></title>之后 b:<body>之后 c:<body>中的<div></div&g ...
- CSS——img标签消除3px
1.dispaly:block 2.float:left 这两种都可以消除3px
- dubbo之配置规则
配置规则 向注册中心写入动态配置覆盖规则 1.该功能通常由监控中心或治理中心的页面完成. RegistryFactory registryFactory = ExtensionLoader.getEx ...
- pycuda installation error: command 'gcc' failed with exit status 1
原文:python采坑之路 Setup script exited with error: command 'gcc' failed with exit status 1 伴随出现"cuda ...
- c++选择文件夹对话框
1,目的 提供一个对话框供用户选择一个文件夹路径. 2,原理&实现 先贴上这个工具类的源码: 在你的程序中使用静态方法 CSelectFolderDlg::Show() 就能显示一个选择文件夹 ...
- CentOS安装Nodejs-v8.11.1
(1)到NodeJs官网(https://nodejs.org/en/download/),复制下载链接 (2)下载并解压 命令:wget https://nodejs.org/dist/v8.11. ...
- mybatis 项目配置
第一:environments MyBatis 支持多个环境,可以任意配置: 第二:transactionManager MyBatis 支持两种类型的事务管理器:JDBC 和 MANAGED(托管) ...
- JS练习:定时器--背景颜色交替变换
代码: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UT ...
- 学习Android
=========================================today start to learn Android================= 我们学习需要的软件: jd ...
- vue 实现点赞
在v-for循环里 <ul class="project_content"> <li v-for="(item, index) in items&quo ...