题目:

描述

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

输入

第一行只有一个数 N ,下面将跟着 2N 行数据。

在前 N 行数据中,每行数据开头第一个数字 number,表明这一行总共有 number个数, number的下一个数为 i ,代表编号为 i 的城镇。这行余下的就是跟 i 有公路连接的城镇名单,并且只能从城镇 i 驶向其他城镇。如 4 1 2 3,表明:此行有 4 个数,跟城镇 1 有公路连接的城镇是编号为 2 和 3 的城镇,且只允许从城镇 1驶向城镇 2 和 3 ,而不能从 2 到 1 或 3 到 1。

在后 N 行数据中,每行由两个数字组成 a , b。

对于每个输入的数有如下关系 0≤input_number≤1000。

输出

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

输入样例 1

  1. 3
  2. 4 1 2 3
  3. 3 4 5
  4. 3 5 8
  5. 1 2
  6. 1 8
  7. 4 8

输出样例 1

  1. Yes
  2. No
  3. Yes
  4.  
  5. 这是一道经典的搜索题,用BFSDFS都行,因为博主DFS打的已经很熟了,准备挑战一下自己,所以我就来讲讲BFS的做法。

  1. 如图,因为是单向公路,所以尽管所有点都连得到点2,但点2却一个点都走不到,所以这是一个有向图。

  1. 首先,让我们来定义一波:
  1. int n;
  2. queue<int>q;
  3. vector<int>g[];

这里也就不需要讲了吧,bfs必备的vector和queue的定义也就这样。


接下来,我们把输入输出解决了,这个输入特别怪异。输入n有2n行,前n行会首先输入一个number,代表这一行加上它共有number个数;后n行每行2个数,是询问,问a和b书否连通。

  1. cin>>n;
  2. for (int i=;i<=n;i++){
  3. int tmp1,tmp2;
  4. cin>>tmp1>>tmp2;
  5. for (int j=;j<tmp1-;j++){
  6. int x;
  7. cin>>x;
  8. g[tmp2].push_back(x);
  9. }
  10.  
  11. }

然后进行输出,如果bool类型的bfs值是true或a和b相等,就输出Yes,否则输出No。

  1. for (int i=;i<=n;i++){
  2. int a,b;
  3. cin>>a>>b;
  4. if(bfs(a,b)==true||a==b){
  5. cout<<"Yes"<<endl;
  6. }
  7. else {
  8. cout<<"No"<<endl;
  9. }
  10. }

最后,开始我们的BFS!

首先,把起点push到队列里。

  1. bool bfs(int start,int end){
  2. q.push(start);
  3. }

然后开始BFS套路:while (!q.empty())

接下来,将目前的位置取出来(now),再弹出队列。

最后,遍历g[now],如果到达了end,就返回ture,否则就将找到的点放在队列里。如果队列都已经清空了,那就只有遗憾地告诉你,没有找到。只有输出No了。

整个BFS:

  1. bool bfs(int start,int end){
  2.  
  3. q.push(start);
  4. while (!q.empty()){
  5. int now=q.front();
  6. q.pop();
  7. for (int i=;i<g[now].size();i++){
  8. if(g[now][i]==end){
  9. return true;
  10. }
  11. q.push(g[now][i]);
  12. }
  13. }
  14. return false;
  15. }

完整代码:

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n,vis[];
  4. queue<int>q;
  5. vector<int>g[];
  6.  
  7. bool bfs(int start,int end){
  8.  
  9. q.push(start);
  10. while (!q.empty()){
  11. int now=q.front();
  12. q.pop();
  13. for (int i=;i<g[now].size();i++){
  14. if(g[now][i]==end){
  15. return true;
  16. }
  17. q.push(g[now][i]);
  18. }
  19. }
  20. return false;
  21. }
  22.  
  23. int main(){
  24. cin>>n;
  25. for (int i=;i<=n;i++){
  26. int tmp1,tmp2;
  27. cin>>tmp1>>tmp2;
  28. for (int j=;j<tmp1-;j++){
  29. int x;
  30. cin>>x;
  31. g[tmp2].push_back(x);
  32. }
  33.  
  34. }
  35. for (int i=;i<=n;i++){
  36. int a,b;
  37. cin>>a>>b;
  38. if(bfs(a,b)==true||a==b){
  39. cout<<"Yes"<<endl;
  40. }
  41. else {
  42. cout<<"No"<<endl;
  43. }
  44. }
  45. return ;
  46. }

最后,Accept送给大家!

YCOJ单向公路的更多相关文章

  1. [Swust OJ 85]--单向公路(BFS)

    题目链接:http://acm.swust.edu.cn/problem/0085/ Time limit(ms): 5000 Memory limit(kb): 65535   Descriptio ...

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

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

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

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

  4. C#算法知识点记录

    针对算法的知识点进行记录 简易桶排序 首先看一个简易桶排序,有一串数字,进行从大到小排列.数字间隔不大,使用一维数组来当作桶,进行插入排序. static void Main(string[] arg ...

  5. 【Noip模拟 20161005】友好城市

    问题描述 小ww生活在美丽的ZZ国.ZZ国是一个有nn个城市的大国,城市之间有mm条单向公路(连 接城市ii.jj的公路只能从ii连到jj).城市ii.jj是友好城市当且仅当从城市ii能到达城市jj并 ...

  6. tarjan强连通分量模板(pascal)

    友好城市 [问题描述]小 w 生活在美丽的 Z 国. Z 国是一个有 n 个城市的大国, 城市之间有 m 条单向公路(连接城市 i. j 的公路只能从 i 连到 j). 城市 i. j 是友好城市当且 ...

  7. Python 多线程和单线程本质应用区别

    先了解下CPU的简单运行原理: 它运行速度非常快,1s内可以运行成千上万次,一个核心可以把1s切分成成千上万个时间片段,这个核心确实同时只能运行一个任务:但是可以将多个任务交替执行,比如上一个时间片段 ...

  8. 【bfs基础】①

    bfs,即广度优先搜索,主要通过队列(queue)进行操作. 稍微解释一下,队列是一种基础数据结构,其形态类似于一支长长的队伍,大概如下: 在C++中,队列的头文件定义为:#include<qu ...

  9. 【JZOJ5064】【GDOI2017第二轮模拟day2】友好城市 Kosarajo算法+bitset+ST表+分块

    题面 在Byteland 一共有n 座城市,编号依次为1 到n,这些城市之间通过m 条单向公路连接. 对于两座不同的城市a 和b,如果a 能通过这些单向道路直接或间接到达b,且b 也能如此到达a,那么 ...

随机推荐

  1. 增强版的RecycleViewAdapter,能够直接使用

    在Android的项目中.须要大量的列表组件来显示数据.在之前的项目中一直使用的是ListView 组件,可是在最新的V7包中出现了能后替代ListView的组件RecycleView. 所以在新的项 ...

  2. c++面试题总结(4)

    一.找错题 试题1: void test1() { ]; "; strcpy( string, str1 ); } 试题2: void test2() { ],str1[]; int i; ...

  3. Screen 状态栏配置

    http://havee.me/linux/2010-08/screen-status-bar.html Screen 状态栏配置 GNU 的 screen 是一个很好的工具.如果需要经常或者大量的登 ...

  4. zookeeper 服务端上下线,客户端感知

    package pfs.y2017.m11.zookeeper.demo03; import java.util.ArrayList; import java.util.List; import or ...

  5. saltstack安装配置(master&minion)

    操作系统centos6.3,centos6.4,windows server2008R2,windows7. 文中的下载链接可能会随着saltstack官网上版本的更新,而出现变动或错误,请以你需要安 ...

  6. mac Git本地服务器配置

    本文转载至 http://blog.csdn.net/piziliweiguang/article/details/9311791   XCode 默认支持 Git 作为代码仓库,当我们新建一个仓库的 ...

  7. 直播:中国HBase技术社区第一届MeetUp

    6月6日,由中国HBase技术社区组织,阿里云主办的中国第一届HBase Meetup将在北京举行,来自阿里.小米.滴滴.360等公司的各位大神会共同探讨HBase2.0的技术革新,HBase在国内各 ...

  8. MapReduce算法形式三:cleanup

    案例三:cleanup 其实这个案例可以不用写这么复杂,不用cleanup也能写,但是为了,突显,突显,突显(重要的事说四遍)cleanup的重要性,琢磨了半天,恩,这样写既可以突显cleanup又显 ...

  9. Maven group, artifact or version defined in the pom file do not match the file ...

    在把library上传到bintray空间的时候报以下错误 Could not upload to 'https://api.bintray.com/content/ping/maven/comm-a ...

  10. JUNO eclipse Version: 4.2.0 添加svn插件

    1.下载最新的这个版本的SVN http://www.eclipse.org/subversive/latest-releases.php 实际的下载地址 http://www.eclipse.org ...