吝啬的国度

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

输入
第一行输入一个整数M表示测试数据共有M(1<=M<=5)组
每组测试数据的第一行输入一个正整数N(1<=N<=100000)和一个正整数S(1<=S<=100000),N表示城市的总个数,S表示参观者所在城市的编号
随后的N-1行,每行有两个正整数a,b(1<=a,b<=N),表示第a号城市和第b号城市之间有一条路连通。
输出
每组测试数据输N个正整数,其中,第i个数表示从S走到i号城市,必须要经过的上一个城市的编号。(其中i=S时,请输出-1)
样例输入
1
10 1
1 9
1 8
8 10
10 3
8 6
1 2
10 4
9 5
3 7
样例输出
-1 1 10 10 9 8 3 1 1 8

前两天刚学过图论中的最短路,今天做这道题,首先想到了用最短路的思想做。写了一个Bellman-Ford,超时了,原因是顶点数*边数太大。然后用广搜写了一下,AC。存储边时用了vector,记得每次都要清空vector。

[cpp] view plaincopy
  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<vector>
  4. #include<queue>
  5. using namespace std;
  6. const int N = 100010;
  7. int pre[N], vis[N], n, s;
  8. vector<int> vec[N];
  9. void Init()
  10. {
  11. for(int i = 1; i <= n; i++)
  12. pre[i] = i, vis[i] = 0;
  13. pre[s] = -1;
  14. }
  15. void bfs()
  16. {
  17. queue<int> Q;
  18. Q.push(s);
  19. while(!Q.empty())
  20. {
  21. int t = Q.front();
  22. Q.pop();
  23. if(vis[t])
  24. continue;
  25. vis[t] = 1;
  26. for(int i = 0; i < vec[t].size(); i++)
  27. {
  28. int p = vec[t][i];
  29. if(!vis[p])
  30. {
  31. pre[p] = t;
  32. Q.push(p);
  33. }
  34. }
  35. }
  36. }
  37. int main()
  38. {
  39. int t, i;
  40. scanf("%d",&t);
  41. while(t--)
  42. {
  43. memset(vec, 0, sizeof(vec));
  44. scanf("%d%d",&n,&s);
  45. int a, b;
  46. for(i = 0; i < n - 1; i++)
  47. {
  48. scanf("%d%d",&a,&b);
  49. vec[a].push_back(b);
  50. vec[b].push_back(a);
  51. }
  52. Init();
  53. bfs();
  54. printf("%d",pre[1]);
  55. for(i = 2; i <= n; i++)
  56. printf(" %d",pre[i]);
  57. printf("\n");
  58. }
  59. return 0;
  60. }

后来看讨论区,出题人说是把无根树转化为有根树,仔细一想,还真是。下面是代码:

[cpp] view plaincopy
  1. /*无根树转有根树,s即为根*/
  2. #include<stdio.h>
  3. #include<string.h>
  4. #include<vector>
  5. using namespace std;
  6. const int N = 100010;
  7. int pre[N], n, s;
  8. vector<int> vec[N];
  9. void Init()
  10. {
  11. for(int i = 1; i <= n; i++)
  12. pre[i] = i;
  13. pre[s] = -1;
  14. }
  15. void dfs(int u, int fa)
  16. {
  17. int k = vec[u].size();
  18. for(int i = 0; i < k; i++)
  19. {
  20. int v = vec[u][i];
  21. if(v != fa)
  22. {
  23. pre[v] = u;
  24. dfs(v, u);
  25. }
  26. }
  27. }
  28. int main()
  29. {
  30. int t, i;
  31. scanf("%d",&t);
  32. while(t--)
  33. {
  34. memset(vec, 0, sizeof(vec));
  35. scanf("%d%d",&n,&s);
  36. int a, b;
  37. for(i = 0; i < n - 1; i++)
  38. {
  39. scanf("%d%d",&a,&b);
  40. vec[a].push_back(b);
  41. vec[b].push_back(a);
  42. }
  43. Init();
  44. dfs(s,-1); //从根节点开始搜
  45. printf("%d",pre[1]);
  46. for(i = 2; i <= n; i++)
  47. printf(" %d",pre[i]);
  48. printf("\n");
  49. }
  50. return 0;
  51. }

NYOJ 20 吝啬的国度 广度优先搜索相关推荐

  1. NYOJ 20 吝啬的国度 (搜索)

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

  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. NYOJ 20 吝啬的国度(深搜)

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

  5. NYOJ 20 吝啬的国度 续

    还是<吝啬的国度>,研读了别人的较为高效的代码,无论是时间开销,还是空间开销都要小很多啊,截图为证: 我的所有运行: 52ms的是我参照别人的写的代码,时间开销比我的小将近一半,内存开销仅 ...

  6. 《图论》— NYOJ 20 吝啬的国度

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

  7. 题目20: 吝啬的国度

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

  8. NOJ 20 吝啬的国度

    开始做深搜的题,这是一种比较常见的递归,就是直接看去的点是从那来的,标记一下避免重复搜. 深搜的注意个人认为,1,要在一定范围内一般是在递归在1e4的范围内: 2,就是要注意标记,不然也可能导致超时的 ...

  9. 小白算法练习 NYOJ 吝啬的国度 dfs+邻接表

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

最新文章

  1. 网络广告推广浅析网站的外链究竟要如何优化效果才会更好呢?
  2. vue-router命名路由
  3. 训练集数量对神经网络光谱的影响
  4. 如何在github上fork一个项目来贡献代码以及同步原作者的修改
  5. optee3.16.0 qemu_v8的环境搭建篇(ubuntu20.10)
  6. OpenCV使用cv :: CascadeClassifier类检测视频流中的对象的实例(附完整代码)
  7. Vue 中 slot插槽 的使用
  8. 数据结构与算法(6) -- heap
  9. 一加7充电_一加真无线耳机曝光,65W快速充电器获认证
  10. [APIO2011] 方格染色
  11. nginx开启支持websocket连接
  12. Ubuntu 16.04 软件安装
  13. 三、地址族与数据序列
  14. lintcode刷题目录
  15. 搭建属于你的家庭网络实时监控–HTML5在嵌入式系统中的应用·高级篇
  16. vs2013配置qt5.7.0
  17. 城市云脑研究之三,人工智能在城市云脑建设中的地位与作用
  18. 工业封装胶粘剂市场现状及未来发展趋势
  19. 新生儿婴幼儿宝宝护理知识学习
  20. 华硕 ROG主题 提取主题包

热门文章

  1. 【错误记录】Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )
  2. 【Android 文件管理】应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 )
  3. .dll与.lib的关系总结
  4. spring第一个小例子(Spring_xjs1)
  5. 前端调试工具Browser-sync(Windows)安装指南
  6. Max Sum(经典DP)
  7. 解决三星 BIOS 模式没有 Fast Bios Mode选项 U盘动项问题
  8. 导出到Excel的操作
  9. 堆栈指针ESP和EBP
  10. ROS学习(十):ROS URDF-joint