20-吝啬的国度

内存限制:64MB
时间限制:1000ms
Special Judge: No

accepted:12
submit:43

题目描述:

在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来。现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你不走重复的路)。

输入描述:

  1. 第一行输入一个整数M表示测试数据共有M(1<=M<=5)组
  2. 每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000),N表示城市的总个数,S表示参观者所在城市的编号
  3. 随后的N-1行,每行有两个正整数a,b(1<=a,b<=N),表示第a号城市和第b号城市之间有一条路连通。

输出描述:

  1. 每组测试数据输N个正整数,其中,第i个数表示从S走到i号城市,必须要经过的上一个城市的编号。(其中i=S时,请输出-1

样例输入:

复制

  1. 1
  2. 10 1
  3. 1 9
  4. 1 8
  5. 8 10
  6. 10 3
  7. 8 6
  8. 1 2
  9. 10 4
  10. 9 5
  11. 3 7

样例输出:

  1. -1 1 10 10 9 8 3 1 1 8
  2.  
  3. 拓展:
      free对内存进行释放,主要是将mallocnewrealloc等申请的内存进行释放
      STL中的vector是进行动态内存的追加,用free进行内存释放会使编译器不清楚从哪开始释放
  4. 分析:
      ①、在数据结构方面我们选择二维vector,用vector来存对应城市相邻的城市,用.size()就可以得到与该城市相邻的城市个数
      ②、因为DFS是线性的、回溯型搜索方式,将会直接或回溯式的找到前面直接相邻的城市
  5. 步骤、
      ①、通过vector建立两个城市的双向距离关系
      ②、使用dfs从入口点s进入,将每一个相邻城市的前驱都赋值为对应的s
  6. 核心代码:
      
  1. void dfs(int s)
  2. {
  3. for(int i = ; i < A[s].size(); ++ i)
  4. {
  5. if(f[A[s][i]]) continue;
  6. f[A[s][i]] = s;
  7. dfs(A[s][i]);
  8. }
  9. }

C/C++代码实现(AC):

  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstring>
  4. #include <cstdio>
  5. #include <cmath>
  6. #include <stack>
  7. #include <map>
  8. #include <queue>
  9.  
  10. using namespace std;
  11. const int MAXN = 1e5 + ;
  12. int f[MAXN];
  13. vector <int> A[MAXN];
  14.  
  15. void init(int n)
  16. {
  17. while(n --)
  18. {
  19. int a, b;
  20. scanf("%d%d", &a, &b);
  21. A[a].push_back(b);
  22. A[b].push_back(a);
  23. }
  24. }
  25.  
  26. void dfs(int s)
  27. {
  28. for(int i = ; i < A[s].size(); ++ i)
  29. {
  30. if(f[A[s][i]]) continue;
  31. f[A[s][i]] = s;
  32. dfs(A[s][i]);
  33. }
  34. }
  35.  
  36. int main()
  37. {
  38. int t;
  39. scanf("%d", &t);
  40. while(t --)
  41. {
  42. int n, s;
  43. memset(f, , sizeof(f));
  44. memset(A, , sizeof(A));
  45. scanf("%d%d", &n, &s);
  46. init(n - );
  47.  
  48. dfs(s);
  49. f[s] = -;
  50. for(int i = ; i < n; ++ i)
  51. printf("%d ", f[i]);
  52. printf("%d\n",f[n]);
  53. }
  54. return ;
  55. }

nyoj 20-吝啬的国度 (DFS)的更多相关文章

  1. NYOJ 20.吝啬的国度-DFS+STL(vector保存上一节点)

    整理代码 吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第 ...

  2. nyoj 20 吝啬的国度

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  3. NYOJ 20 吝啬的国度 (深搜)

    题目链接 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号 ...

  4. nyist 20 吝啬的国度(dfs)

    吝啬的国度 题目描述: 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来. 现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市, 必须经过的前一 ...

  5. nyoj 题目20 吝啬的国度

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  6. 吝啬的国度(dfs+vector)

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  7. 【ACM】吝啬的国度 - DFS (图)

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  8. NYOJ题目20吝啬的国度

    -----------------------------------------n-1条边的无向连通图是一棵树,又因为树上两点之间的路径是唯一的,所以解是唯一的.(注意并不一定是二叉树,所以最好采用 ...

  9. Nyoj 吝啬的国度(图论&&双DFS)

    描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你 ...

随机推荐

  1. 安装VMware Tools显示灰色正确解决办法

    首先问题如下: 解决办法如下:1.关闭虚拟机: 2.在虚拟机设置分别设置CD/DVD.CD/DVD2和软盘为自动检测三个步骤: 3.再重启虚拟机,灰色字即点亮. 大功告成,如果解决了你的问题,点个赞鼓 ...

  2. 程序员成长的四个简单技巧,你 get 了吗?

    最近拜读了"阿里工程师的自我修养"手册,12 位技术专家分享生涯感悟来帮助我们这些菜鸡更好的成长,度过中年危机,我收获颇多,其中有不少的方法技巧和我正在使用的,这让我觉得我做的这些 ...

  3. Spring Boot2 系列教程(十五)定义系统启动任务的两种方式

    在 Servlet/Jsp 项目中,如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web基础中的三大组件( ...

  4. webpack4.0入门总结

    1. 安装webpack: // 初始化.安装webpack以及webpack-clinpm init npm install --save-dev webpack webpack-cli 2.创建配 ...

  5. ESP8266开发之旅 网络篇⑦ TCP Server & TCP Client

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  6. 百万年薪python之路 -- 装饰器

    装饰器 1.1 开放封闭原则 开放封闭原则具体定义是这样: 1.对扩展是开放的 我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改.所以我们必须允许代码扩展.添加新 ...

  7. solr学习篇(四) java使用solr简单查询(初识solrj)

    使用java实现solr查询 目录:1:导入jar包 2:核心类介绍 3:代码实现 4:注意事项 一 导入jar包 solrj可以使Java应用程序很方便的访问与操作solr. solrj有几个核心类 ...

  8. Java初学者的学习路线推荐

    Java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是你是如何学习Java的,能不能给点建议?今天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来谈每 ...

  9. 实现文字色彩渐变(Mask)

    文字色彩渐变是指的文字本身的颜色,不是背景渐变.要实现此效果可以采用Mask组件,本文先从介绍mask说起 1)Mask介绍 mask组件实现的作用是,mask组件所在游戏物体下的子游戏物体在mask ...

  10. django-URL认识(一)

    URL由三部分组成:资源类型.存放资源的主机域名.资源文件名.也可认为由4部分组成:协议.主机.端口.路径 URL的一般语法格式为:(带方括号[]的为可选项): protocol :// hostna ...