NYOJ 20 吝啬的国度
来源:互联网 发布:数据质检是干什么的 编辑:程序博客网 时间:2024/06/07 18:40
吝啬的国度
时间限制: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
来源
经典题目
思路:
把无根树转化为有根树(S为根),从S开始往下DFS,把往下搜的那个点作为父节点,如果已经有父节点,跳过。
#include<cstring>#include<cstdio>#include<iostream>#include<algorithm>#include<vector>using namespace std;#define LL long long#define INF 0x3f3f3f3fint pre[100005];vector<int>v[100005];//邻接表表示图int N,S;int a,b;void DFS(int cur){ for(int i=0;i<v[cur].size();i++){ if(pre[v[cur][i]])continue;//因为是双向的边,这里防止了从叶子节点在往回搜,因为往上的话每个节点已经DFS过有父节点了。 pre[v[cur][i]]=cur; DFS(v[cur][i]); }}int main(){ int T; scanf("%d",&T); while(T--){ memset(pre,0,sizeof(pre)); memset(v,0,sizeof(v)); scanf("%d%d",&N,&S); for(int i=0;i<N-1;i++){ scanf("%d%d",&a,&b); v[a].push_back(b);//双向边 v[b].push_back(a); } pre[S]=-1; DFS(S); for(int i=1;i<=N;i++)printf("%d ",pre[i]); printf("\n"); } return 0;}
0 0
- NYOJ 20 吝啬的国度
- NYOJ 20-吝啬的国度
- NYOJ-20 吝啬的国度
- NYOJ 20 吝啬的国度
- 吝啬的国度(NYOJ 20)
- Nyoj-20 吝啬的国度
- nyoj,20,吝啬的国度
- nyoj-20-吝啬的国度
- NYOJ 20 吝啬的国度
- Nyoj 20 吝啬的国度
- NYOJ-20 吝啬的国度
- NYOJ-20-吝啬的国度
- NYOJ-20 吝啬的国度
- NYOJ 20 吝啬的国度
- NYOJ 20 吝啬的国度
- NYOJ 20 吝啬的国度
- NYOJ 20 吝啬的国度
- NYOJ 20 吝啬的国度
- CCKiller:Linux轻量级CC攻击防御工具,秒级检查、自动拉黑和释放
- struts2基础篇(1)
- C#调用百度地图接口简单示例
- Hadoop Yarn 框架原理及运作机制
- 二维数组中的查询
- NYOJ 20 吝啬的国度
- intel-pcm简单介绍
- C#学习篇(八)Nullable类型、checked关键字、运算符重载
- java static笔记
- QT Creator Log List
- 如何获取SQL Server数据库元数据
- 油水井图片库开发总结
- mac pro编译android系统源码 Can not find SDK 10.6
- openwrt 编译烧写流程