热门标签 | 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}






推荐阅读
  • Hanks博士是一位著名的生物技术专家,他的儿子Hankson对数学有着浓厚的兴趣。最近,Hankson遇到了一个有趣的数学问题,涉及求解特定条件下的正整数x,而不使用传统的辗转相除法。 ... [详细]
  • 在1995年,Simon Plouffe 发现了一种特殊的求和方法来表示某些常数。两年后,Bailey 和 Borwein 在他们的论文中发表了这一发现,这种方法被命名为 Bailey-Borwein-Plouffe (BBP) 公式。该问题要求计算圆周率 π 的第 n 个十六进制数字。 ... [详细]
  • 1、编写一个Java程序在屏幕上输出“你好!”。programmenameHelloworld.javapublicclassHelloworld{publicst ... [详细]
  • 网络流24题——试题库问题
    题目描述:假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取m道题组成试卷。并要求试卷包含指定类型的试题。试设计一个满足要求的组卷算 ... [详细]
  • hlg_oj_1116_选美大赛这题是最长子序列,然后再求出路径就可以了。开始写的比较乱,用数组什么的,后来用了指针就好办了。现在把代码贴 ... [详细]
  • 本文详细介绍了Linux系统中信号量的相关函数,包括sem_init、sem_wait、sem_post和sem_destroy,解释了它们的功能和使用方法,并提供了示例代码。 ... [详细]
  • 本文通过C++语言实现了一个递归算法,用于解析并计算数学表达式的值。该算法能够处理加法、减法、乘法和除法操作。 ... [详细]
  • 问题描述现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能;在实际开发过程中 ... [详细]
  • 问题场景用Java进行web开发过程当中,当遇到很多很多个字段的实体时,最苦恼的莫过于编辑字段的查看和修改界面,发现2个页面存在很多重复信息,能不能写一遍?有没有轮子用都不如自己造。解决方式笔者根据自 ... [详细]
  • importjava.io.*;importjava.util.*;publicclass五子棋游戏{staticintm1;staticintn1;staticfinalintS ... [详细]
  • 探讨了一个包含纯虚函数的C++代码片段,分析了其中的语法错误及逻辑问题,并提出了修正方案。 ... [详细]
  • 想把一组chara[4096]的数组拷贝到shortb[6][256]中,尝试过用循环移位的方式,还用中间变量shortc[2048]的方式。得出的结论:1.移位方式效率最低2. ... [详细]
  • 洛谷 P4009 汽车加油行驶问题 解析
    探讨了经典算法题目——汽车加油行驶问题,通过网络流和费用流的视角,深入解析了该问题的解决方案。本文将详细阐述如何利用最短路径算法解决这一问题,并提供详细的代码实现。 ... [详细]
  • 如何从BAM文件绘制ATAC-seq插入片段长度分布图?
    在ATAC-seq数据处理中,插入片段长度的分布图是一个重要的质量控制指标,它能反映出核小体的周期性排列。本文将详细介绍如何从BAM文件中提取并绘制这些数据。 ... [详细]
  • 本文介绍如何手动实现一个字符串连接函数,该函数不依赖于C语言的标准字符串处理函数,如strcpy或strcat。函数原型为void concatenate(char *dest, char *src),其主要作用是将源字符串src追加到目标字符串dest的末尾。 ... [详细]
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社区 版权所有