题目链接:http://acm.swust.edu.cn/problem/0085/

Time limit(ms): 5000      Memory limit(kb): 65535
 
Description

某个地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,且有公路的并不都能双向行驶。现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另一个城镇。(我们规定,城镇自己跟自己可互相到达,即A可到达A).

Input

第一行只有一个数N,下面将跟着2N行数据. 在前N行数据中,对于每行数据,最开头一个数字number,表明这一行总共有number个数,number的下一个数为i,代表编号为i的那个城镇.这行余下的就是跟i有公路连接的城镇的(编号)名单,且只能从城镇i驶向其他城镇。如 4 1 2 3,表明:此行有4个数,跟城镇1有公路连接的城镇是编号为2和3的城镇.是从1连到2 和3 ,不能从2 和3 连到1. 在后N行数据中,每行由两个数字组成a,b(表示城镇的编号). 对于每个输入的数有如下关系 0 <= input_number <= 1000 .

 
Output

对于输入数据中的每个a,b,判断是否可以从城镇a通过公路到达城镇b,如果可以,输出Yes;否则输出No.

Sample Input

3
4 1 2 3
3 4 5
3 5 8
1 2
1 8
4 8
Sample Output
Yes
No
Yes
 
 
解题思路:处理好数据后直接bfs~~~
 
代码如下:
  1. #include <iostream>
  2. #include <queue>
  3. #include <cstring>
  4. #include <algorithm>
  5. using namespace std;
  6. int mpt[][], vis[];
  7. int bfs(int x, int y, int n){
  8. queue<int> Q;
  9. Q.push(x);
  10. while (!Q.empty()){
  11. int now = Q.front();
  12. Q.pop();
  13. if (now == y) return ;
  14. for (int i = ; i < n; i++){
  15. if (!vis[i] && mpt[now][i]){
  16. vis[i] = ;
  17. Q.push(i);
  18. }
  19. }
  20. }
  21. return ;
  22. }
  23. int main(){
  24. int n, t, x, y, i, j, maxn = -;
  25. cin >> t;
  26. for (i = ; i < t; i++){
  27. cin >> n >> x;
  28. for (j = ; j < n - ; j++){
  29. cin >> y;
  30. mpt[x][y] = ;
  31. maxn = max(maxn, max(x, y) + );//找出出现的点的最大值+1,避免大范围搜索不必要的点
  32. }
  33. }
  34. for (i = ; i < t; i++){
  35. memset(vis, , sizeof(vis));
  36. cin >> x >> y;
  37. cout << (bfs(x, y, maxn) ? "Yes\n" : "No\n");
  38. }
  39. return ;
  40. }

以前有个代码,个人感觉没问题,但是一直Rutime Error,有大神路过给个原因吧~~~

代码如下:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #define maxn 10001
  4. int map[maxn][maxn], max;
  5. int dfs(int star, int next)
  6. {
  7. int i, flag, vis[maxn];
  8. memset(vis, , sizeof(vis));
  9. vis[star] = ;
  10. if (map[star][next] == )
  11. return ;
  12. for (i = , flag = ; i <= max&&!flag; i++)
  13. {
  14. if (vis[i] == && map[star][i] == )
  15. {
  16. vis[i] = ;
  17. flag = dfs(i, next);
  18. vis[i] = ;
  19. }
  20. }
  21. return flag;
  22. }
  23. int main()
  24. {
  25. int i, j, m, n;
  26. int star, next;
  27. scanf("%d", &n);
  28. memset(map, , sizeof(map));
  29. for (i = ; i<maxn; i++)
  30. map[i][i] = ;
  31. max = ;
  32. for (i = ; i <= n; i++)
  33. {
  34. scanf("%d%d", &m, &star);
  35. if (star> max)
  36. max = star;
  37. for (j = ; j <= m - ; j++)
  38. {
  39. scanf("%d", &next);
  40. if (next > max)
  41. max = next;
  42. map[star][next] = ;
  43. }
  44. }
  45. for (i = ; i <= n; i++)
  46. {
  47. scanf("%d%d", &star, &next);
  48. if (dfs(star, next))
  49. printf("YES\n");
  50. else
  51. printf("NO\n");
  52. }
  53. return ;
  54. }

[Swust OJ 85]--单向公路(BFS)的更多相关文章

  1. 1107: 单向公路(bfs+输入整理)(DFS也可以,而且更快)

    Description 某个地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,且有公路的并不都能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一 ...

  2. YCOJ单向公路

    题目: 描述 某地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,并且有的公路并不能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另 ...

  3. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  4. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  5. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  6. [Swust OJ 1023]--Escape(带点其他状态的BFS)

    解题思路:http://acm.swust.edu.cn/problem/1023/ Time limit(ms): 5000 Memory limit(kb): 65535     Descript ...

  7. [Swust OJ 1126]--神奇的矩阵(BFS,预处理,打表)

    题目链接:http://acm.swust.edu.cn/problem/1126/ Time limit(ms): 1000 Memory limit(kb): 65535 上一周里,患有XX症的哈 ...

  8. [Swust OJ 409]--小鼠迷宫问题(BFS+记忆化搜索)

    题目链接:http://acm.swust.edu.cn/problem/409/ Time limit(ms): 1000 Memory limit(kb): 65535   Description ...

  9. 【bfs】单向公路-C++

    描述 某地区有许多城镇,但并不是每个城镇都跟其他城镇有公路连接,并且有的公路并不能双向行驶.现在我们把这些城镇间的公路分布及允许的行驶方向告诉你,你需要编程解决通过公路是否可以从一个城镇到达另一个城镇 ...

随机推荐

  1. BZOJ 2329: [HNOI2011]括号修复( splay )

    把括号序列后一定是))))((((这种形式的..所以维护一个最大前缀和l, 最大后缀和r就可以了..答案就是(l+1)/2+(r+1)/2...用splay维护,O(NlogN). 其实还是挺好写的, ...

  2. jenkins上集成fitnesse

    烂笔头胜过好记性,恩,养成随手记的习惯 Fitnesse是完全有Java开发的测试框架,跨平台并且便于与其他测试框架和工具的合并(Jenkins.TestNG,Junit以及Selenium的集成) ...

  3. 为什么要用on()而不直接使用click

    为什么要用on()而不直接使用clickhttp://stackoverflow.com/questions/10082031/why-use-jquery-on-instead-of-clickht ...

  4. 初次接触VC++载入自己定义LIB 即静态链接

    分为两部分 第一部分  LIBproject 用来生成LIB文件 #ifndef _myfun #define _myfun int myfun(int x,int y) { return x+y; ...

  5. 让自己的apk可以被别人用二维码下载

    通过二维码下载的流程是, 1.截获地址当有一个url被二维码扫描后的被截获,请先确认能够被截获. 2.接受intent无论是把这个消息的地址发送给activity,还是reciver,都要进入到你的程 ...

  6. EJB3.0开发环境的搭建

    EJB Container的介绍SUN公司正式推出了EJB的规范之后,在众多的公司和开发者中引起了非常大的反响.标志着用Java开发企业级应用系统将变的非常easy.很多公司都已经推出了或正打算EJB ...

  7. Android GPS应用:动态获取位置信息

    在上文中,介绍了GPS概念及Android开发GPS应用涉及到的常用类和方法.在本文中,开发一个小应用,实时获取定位信息,包括用户所在的纬度.经度.高度.方向.移动速度等.代码如下: Activity ...

  8. 原生JS实现字符串分割

    window.onload = function(){ var str = 'abc,dbc,qqq,aaa'; var sp = split(str,',')//与字符串的分隔符要一直. alert ...

  9. BZOJ 1225: [HNOI2001] 求正整数( dfs + 高精度 )

    15 < log250000 < 16, 所以不会选超过16个质数, 然后暴力去跑dfs, 高精度计算最后答案.. ------------------------------------ ...

  10. Node.js学习笔记1(简介)

            1.什么是Node.js?         Node.js,或者 Node,是一个可以让 JavaScript 运行在服务器端的平台.它可以让 JavaScript 脱离浏览器的束缚运 ...