热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【noip2014】寻找道路

【noip2014】寻找道路 题目描述 Description 在有向图G中,每条边的长度均为1,现给定起点和终点,请你在图中找一条从起点到终点的路径&
【noip2014】寻找道路
题目描述 Description

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

1.路径上的所有点的出边所指向的点都直接或间接与终点连通。

2.在满足条件1的情况下使路径最短。

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

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




输入描述 Input Description

第一行有两个用一个空格隔开的整数n和m,表示图有n个点和m条边。

接下来的m行每行2个整数x、y,之间用一个空格隔开,表示有一条边从点x指向点y。

最后一行有两个用一个空格隔开的整数s、t,表示起点为s,终点为t。




输出描述 Output Description

输出文件名为road.out。

输出只有一行,包含一个整数,表示满足题目述的最短路径的长度。如果这样的路径不存在,输出-1。



样例输入 Sample Input

road.in

road.out

3 2

1 2

2 1

1 3

-1



样例输出 Sample Output

road.in

road.out

6 6

1 2

1 3

2 6

2 5

4 5

3 4

1 5

3



数据范围及提示 Data Size & Hint

对于30%的数据&#xff0c;0< n 10&#xff0c;0< m 20&#xff1b;

对于60%的数据&#xff0c;0< n 100&#xff0c;0< m 2000&#xff1b;

对于100%的数据&#xff0c;0< n 10,000&#xff0c;0< m 200,000&#xff0c;0< x,y,s,t≤n&#xff0c;x≠t。


下午调了两个小时四十分钟&#61; &#61;叫我傻逼

因为之前的思路错了&#xff0c;我刚开始认为直接做广搜&#xff0c;然后搜到一个点再做一次dfs&#xff0c;结果代码非常麻烦&#xff0c;而且TLE

之后才想明白&#xff0c;先反向建图&#xff0c;然后做一遍SPFA或dfs&#xff0c;看看那些点和终点可以连通&#xff0c;然后再做广搜&#61; &#61;

wok叫我傻逼&#61; &#61;

【代码】

#include
#include
#include
#define MAXN 200005
#define maxn 10005
using namespace std;
int n,m,x,y,s,t,head,tail;
int p[maxn];
bool bb[maxn];
struct hp{int num,step;
}queue[maxn];
int v[MAXN],next[MAXN],point[maxn],a[MAXN],b[MAXN];
void dfs(int x){for (int i&#61;point[x];i;i&#61;next[i])if (!p[v[i]]){p[v[i]]&#61;1;dfs(v[i]);}
}
bool check(int x){bool pd&#61;true;for (int i&#61;point[x];i;i&#61;next[i])if (!p[v[i]]){pd&#61;false; break;}return pd;
}
int main(){scanf("%d%d",&n,&m);for (int i&#61;1;i<&#61;m;&#43;&#43;i){scanf("%d%d",&y,&x);v[i]&#61;y;next[i]&#61;point[x];point[x]&#61;i;a[i]&#61;y; b[i]&#61;x;}scanf("%d%d",&s,&t);p[t]&#61;1;dfs(t);memset(next,0,sizeof(next));memset(point,0,sizeof(point));memset(v,0,sizeof(v));for (int i&#61;1;i<&#61;m;&#43;&#43;i){x&#61;a[i]; y&#61;b[i];v[i]&#61;y;next[i]&#61;point[x];point[x]&#61;i;}head&#61;0;tail&#61;1;queue[tail].num&#61;s;queue[tail].step&#61;0;while (head}






推荐阅读
  • 本文深入探讨了POJ2762问题,旨在通过强连通分量缩点和单向连通性的判断方法,解决有向图中任意两点之间的可达性问题。文章详细介绍了算法原理、实现步骤,并附带完整的代码示例。 ... [详细]
  • 本文介绍了Linux系统中的文件IO操作,包括文件描述符、基本文件操作函数以及目录操作。详细解释了各个函数的参数和返回值,并提供了代码示例。 ... [详细]
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 本文详细介绍了网络存储技术的基本概念、分类及应用场景。通过分析直连式存储(DAS)、网络附加存储(NAS)和存储区域网络(SAN)的特点,帮助读者理解不同存储方式的优势与局限性。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 哈密顿回路问题旨在寻找一个简单回路,该回路包含图中的每个顶点。本文将介绍如何判断给定的路径是否构成哈密顿回路。 ... [详细]
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • C语言基础入门:7个经典小程序助你快速掌握编程技巧
    本文精选了7个经典的C语言小程序,旨在帮助初学者快速掌握编程基础。通过这些程序的实践,你将更深入地理解C语言的核心概念和语法结构。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • 本文详细介绍如何在Linux系统中配置SSH密钥对,以实现从一台主机到另一台主机的无密码登录。内容涵盖密钥对生成、公钥分发及权限设置等关键步骤。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • 本文介绍了多个适用于用户界面设计的Canvas框架,帮助开发者选择最适合的工具。 ... [详细]
  • 本文将详细探讨Linux pinctrl子系统的各个关键数据结构,帮助读者深入了解其内部机制。通过分析这些数据结构及其相互关系,我们将进一步理解pinctrl子系统的工作原理和设计思路。 ... [详细]
author-avatar
董鹏飞80
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有