不知道是因为我菜还是别的,最近老是看错题。

题目描述

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

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

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

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

Solution

  1. 定义一个点是黑点,当且仅当它能沿着边走到终点(不需满足题设条件);
  2. 定义一个点是YH点,当且仅当它引出的边指向的点都是黑点(起点终点都是YH点);
  3. 删去所有非YH点,跑 SPFA 即可。

注意反向建图

#include<cstdio>
#include<cstdlib>
#include<cstring> const int MAXN=10010;
const int MAXM=200010; struct node{
int x,y,next;
}e[MAXM];
int len=0;
int first[MAXN];
int n,m;
int sx,sy;
bool dis[MAXN];
int ST,ED;
int st,ed;
int q[MAXM*10];
int f[MAXN],v[MAXN]; void ins(int x,int y){
e[++len].x=x;e[len].y=y;
e[len].next=first[x];first[x]=len;
}
void init(){
memset(dis,1,sizeof(dis));dis[ED]=0;
st=1;ed=2;q[1]=ED;
while(st!=ed){
int x=q[st];
for(int i=first[x];i;i=e[i].next){
int y=e[i].y;
if(!dis[y]) continue;
dis[y]=0;
q[ed++]=y;
}
++st;
}
if(dis[ST]){
puts("-1");
exit(0);
}
bool rework[MAXN];
memset(rework,0,sizeof(rework));
for(int i=1;i<=n;++i)
if(dis[i]){
rework[i]=1;
for(int j=first[i];j;j=e[j].next)
rework[e[j].y]=1;
}
for(int i=1;i<=n;++i)
dis[i]=rework[i];
}
void spfa(){
memset(f,63,sizeof(f));f[ED]=0;
memset(v,0,sizeof(v));v[ED]=1;
st=1;ed=2;q[1]=ED;
while(st!=ed){
int x=q[st];
for(int i=first[x];i;i=e[i].next){
int y=e[i].y;
if(dis[y]) continue;
if(f[y]>f[x]+1){
f[y]=f[x]+1;
if(!v[y]){
v[y]=1;
q[ed++]=y;
}
}
}
++st;v[st]=0;
}
}
inline int read(){
int x=0; char c;
do c=getchar(); while(c<'0'||c>'9');
while(c>='0'&&c<='9')
x=x*10+c-48,c=getchar();
return x;
}
int main(){
n=read();m=read();
for(int i=1;i<=m;++i){
sx=read();sy=read();
ins(sy,sx);
}
ST=read();ED=read();
init();
spfa();
printf("%d",f[ST]);
}

[NOIp2014] luogu P2296 寻找道路的更多相关文章

  1. 【luogu P2296 寻找道路】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2296 题意:给定起点终点,找一条从起点到终点的最短路径使路上的每个点都能有路径到达终点. 我们先反着建一遍图 ...

  2. luogu P2296 寻找道路

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

  3. luogu P2296 寻找道路 |最短路

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

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

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

  5. luogu 2296 寻找道路 (搜索)

    luogu 2296 寻找道路 题目链接:https://www.luogu.org/problemnew/show/P2296 从终点bfs或者dfs,找出所有终点能到达的点. 然后再从1到n看一下 ...

  6. 洛谷P2296 寻找道路==codevs3731 寻找道路

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

  7. 洛谷——P2296 寻找道路

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

  8. 洛谷P2296 寻找道路 [拓扑排序,最短路]

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

  9. NOIP2014 day2 t2 寻找道路

    寻找道路 NOIP2014 day2 t2 描述 在有向图 G 中,每条边的长度均为 1,现给定起点和终点,请你在图中找一条从起点到 终点的路径,该路径满足以下条件: 1.路径上的所有点的出边所指向的 ...

随机推荐

  1. Linux 笔记 - 第十三章 Linux 系统日常管理之(一)系统状态监控

    博客地址:http://www.moonxy.com 一.前言 如果你是一名 Linux 运维人员,最主要的工作是优化系统配置,使应用在系统上以最优的状态运行.系统运行状态主要包括:系统负载.内存状态 ...

  2. HTML定位——绝对定位和相对定位、固定定位

    1.绝对定位 绝对定位指的是通过规定HTML元素在水平和垂直方向上的位置来固定元素,基于绝对定位的元素不会占据空间. 绝对定位的位置声明是相对于已定位的并且包含关系最近的祖先元素.如果当前需要被定为的 ...

  3. 品Spring:帝国的基石

    序 生活是一杯酒,有时需要麻醉自己,才能够暂时忘却痛苦与不快.生活是一杯茶,有时需要细细品味,才发现苦涩背后也会有甘甜. Spring是一杯酒,一眼望不到边的官方文档,着实让人难以下咽.Spring是 ...

  4. 软件测试的分类&软件测试生命周期

    软件测试的分类: 按测试执行阶段:单元测试.集成测试.系统测试.验收测试.(正式验收测试,Alpha 测试-内侧,Beta 测试-公测) 按测试技术分类:黑盒测试.白盒测试.灰盒测试 按测试对象是否运 ...

  5. 基于Linux系统--web环境搭建

    上线部署文档 数据库部分1.下载Mysql服务    #yum  install  mysql-server 2.更改             /etc/my.cnf 3.启动Mysql        ...

  6. C# 事件 Event

    一.事件是什么 微软的定义:和委托类似,事件是后期绑定机制. 实际上,事件是建立在对委托的语言支持之上的.事件是对象用于(向系统中的所有相关组件)广播已发生事情的一种方式. 任何其他组件都可以订阅事件 ...

  7. c3p0配置记录

    官方文档 : http://www.mchange.com/projects/c3p0/index.html <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 ...

  8. @Data注解getset不起作用

    在idea的setting安装Lombok插件,重启idea

  9. jenkins+ant构建项目时候build.xml需要改动的地方说明

    上一节将build.xml文件代码列出来了,这一节给出说明,要想使用该文件,需要变更的地方有哪些.

  10. 阿里云ESC服务器centos6.9使用及注意事项

    阿里云ESC服务器,配置低,但是足够新手尝试操作练习. 使用之前,注意事项: 选择操作系统 设置实例快照 安装终端工具 一,选择操作系统. 可以在购买服务器的时候进行选择系统盘,也可以在购买之后在实例 ...