NYOJ 20 吝啬的国度 广度优先搜索
吝啬的国度
- 描述
-
在一个吝啬的国度里有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- #include<stdio.h>
- #include<string.h>
- #include<vector>
- #include<queue>
- using namespace std;
- const int N = 100010;
- int pre[N], vis[N], n, s;
- vector<int> vec[N];
- void Init()
- {
- for(int i = 1; i <= n; i++)
- pre[i] = i, vis[i] = 0;
- pre[s] = -1;
- }
- void bfs()
- {
- queue<int> Q;
- Q.push(s);
- while(!Q.empty())
- {
- int t = Q.front();
- Q.pop();
- if(vis[t])
- continue;
- vis[t] = 1;
- for(int i = 0; i < vec[t].size(); i++)
- {
- int p = vec[t][i];
- if(!vis[p])
- {
- pre[p] = t;
- Q.push(p);
- }
- }
- }
- }
- int main()
- {
- int t, i;
- scanf("%d",&t);
- while(t--)
- {
- memset(vec, 0, sizeof(vec));
- scanf("%d%d",&n,&s);
- int a, b;
- for(i = 0; i < n - 1; i++)
- {
- scanf("%d%d",&a,&b);
- vec[a].push_back(b);
- vec[b].push_back(a);
- }
- Init();
- bfs();
- printf("%d",pre[1]);
- for(i = 2; i <= n; i++)
- printf(" %d",pre[i]);
- printf("\n");
- }
- return 0;
- }
后来看讨论区,出题人说是把无根树转化为有根树,仔细一想,还真是。下面是代码:
[cpp] view plaincopy- /*无根树转有根树,s即为根*/
- #include<stdio.h>
- #include<string.h>
- #include<vector>
- using namespace std;
- const int N = 100010;
- int pre[N], n, s;
- vector<int> vec[N];
- void Init()
- {
- for(int i = 1; i <= n; i++)
- pre[i] = i;
- pre[s] = -1;
- }
- void dfs(int u, int fa)
- {
- int k = vec[u].size();
- for(int i = 0; i < k; i++)
- {
- int v = vec[u][i];
- if(v != fa)
- {
- pre[v] = u;
- dfs(v, u);
- }
- }
- }
- int main()
- {
- int t, i;
- scanf("%d",&t);
- while(t--)
- {
- memset(vec, 0, sizeof(vec));
- scanf("%d%d",&n,&s);
- int a, b;
- for(i = 0; i < n - 1; i++)
- {
- scanf("%d%d",&a,&b);
- vec[a].push_back(b);
- vec[b].push_back(a);
- }
- Init();
- dfs(s,-1); //从根节点开始搜
- printf("%d",pre[1]);
- for(i = 2; i <= n; i++)
- printf(" %d",pre[i]);
- printf("\n");
- }
- return 0;
- }
NYOJ 20 吝啬的国度 广度优先搜索相关推荐
- NYOJ 20 吝啬的国度 (搜索)
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...
- NYOJ 20 吝啬的国度
吝啬的国度 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市 ...
- NYOJ 20 吝啬的国度(深搜)
描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设 ...
- NYOJ 20 吝啬的国度(深搜)
描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设 ...
- NYOJ 20 吝啬的国度 续
还是<吝啬的国度>,研读了别人的较为高效的代码,无论是时间开销,还是空间开销都要小很多啊,截图为证: 我的所有运行: 52ms的是我参照别人的写的代码,时间开销比我的小将近一半,内存开销仅 ...
- 《图论》— NYOJ 20 吝啬的国度
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...
- 题目20: 吝啬的国度
吝啬的国度 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市 ...
- NOJ 20 吝啬的国度
开始做深搜的题,这是一种比较常见的递归,就是直接看去的点是从那来的,标记一下避免重复搜. 深搜的注意个人认为,1,要在一定范围内一般是在递归在1e4的范围内: 2,就是要注意标记,不然也可能导致超时的 ...
- 小白算法练习 NYOJ 吝啬的国度 dfs+邻接表
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...
最新文章
- 网络广告推广浅析网站的外链究竟要如何优化效果才会更好呢?
- vue-router命名路由
- 训练集数量对神经网络光谱的影响
- 如何在github上fork一个项目来贡献代码以及同步原作者的修改
- optee3.16.0 qemu_v8的环境搭建篇(ubuntu20.10)
- OpenCV使用cv :: CascadeClassifier类检测视频流中的对象的实例(附完整代码)
- Vue 中 slot插槽 的使用
- 数据结构与算法(6) -- heap
- 一加7充电_一加真无线耳机曝光,65W快速充电器获认证
- [APIO2011] 方格染色
- nginx开启支持websocket连接
- Ubuntu 16.04 软件安装
- 三、地址族与数据序列
- lintcode刷题目录
- 搭建属于你的家庭网络实时监控–HTML5在嵌入式系统中的应用·高级篇
- vs2013配置qt5.7.0
- 城市云脑研究之三,人工智能在城市云脑建设中的地位与作用
- 工业封装胶粘剂市场现状及未来发展趋势
- 新生儿婴幼儿宝宝护理知识学习
- 华硕 ROG主题 提取主题包
热门文章
- 【错误记录】Oboe / AAudio 播放器报错 ( onEventFromServer - AAUDIO_SERVICE_EVENT_DISCONNECTED - FIFO cleared )
- 【Android 文件管理】应用可访问的存储空间 ( 存储空间分类 | 存储空间访问权限 | 分区存储 )
- .dll与.lib的关系总结
- spring第一个小例子(Spring_xjs1)
- 前端调试工具Browser-sync(Windows)安装指南
- Max Sum(经典DP)
- 解决三星 BIOS 模式没有 Fast Bios Mode选项 U盘动项问题
- 导出到Excel的操作
- 堆栈指针ESP和EBP
- ROS学习(十):ROS URDF-joint