NYOJ 20

 

吝啬的国度

时间限制: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
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <vector>
 5 using namespace std;
 6
 7 int p[100010] = {0};
 8 //vector <int > g[100010];//用这个表示二维数组的话,没法直接用clear方法,若用for循环清空怕费时间
 9 //vector <vector <int > > g(100010);
10 vector<vector<int> > g(100010,vector<int>());
11 int n,s;//注意s从1开始
12
13 void read_tree()
14 {
15      int u,v,i,j,k;
16      scanf("%d%d",&n,&s);
17      for(i=0;i<n-1;i++)
18      {
19           scanf("%d%d",&u,&v);
20           g[u].push_back(v);//与u的相邻点
21           g[v].push_back(u);
22      }
23 }
24
25 void dfs(int u,int father)//递归转化为以U为根的子树,父节点为father
26 {
27      int i,j,k;
28      int d = g[u].size();//与u的相邻点 个数
29      for(i=0;i<d;i++)
30      {
31           int v = g[u][i];//u大的第i个相邻点是v
32           if(v!=father)//不加的话会无限递归
33                dfs(v,p[v] = u);//v的父亲设为u ,归转化为以归转化为以U为根的子树为根的子树
34      }
35 }
36
37 int main()
38 {
39      int i,j,k,T;
40      scanf("%d",&T);
41      while(T--)
42      {
43           //g.clear();//用这个清空,一直re
44           for(i=0;i<100010;i++)//也可以直接memset
45                g[i].clear();
46           memset(p,0,sizeof(p));
47           read_tree();
48           p[s] = -1;
49           dfs(s,-1);
50           //printf("-1");//不能线输出-1,第一个不应定是-1
51           for(i=1;i<=n;i++)
52                printf("%d ",p[i]);
53           printf("\n");//nyoj上加\b会wa
54      }
55      return 0;
56 }
57
58
59
60      

 

时间: 2024-10-27 22:40:21

NYOJ 20的相关文章

nyoj题目20吝啬的国度【深搜】

吝啬的国度 时间限制: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

NYOJ 219 An problem about date

点击打开链接NYOJ 219 1题目:                                                                  An problem about date 描述     acm的iphxer经常忘记某天是星期几,但是他记那天的具体日期,他希望你能写个程序帮帮他. 输入     每行有三个整数 year,month,day,日期在1600年1月1日到9600年1月1日之间; 输出     输出对应的星期,用一个整数表示;(星期一到星期六用1

20 5-IOS 审核被拒因为20.5的问题

问题描述 IOS 审核被拒因为20.5的问题 彩票APP总是一直因为一个授权的问题被拒,前辈们知道怎么解决吗? Reasons 20.5: Apps that offer real money gaming (e.g. sports betting, poker, casino games, horse racing) or lotteries must have necessary licensing and permissions in the locations where the App

精简的20个PS功能常用快捷键

  一.常用的热键组合 1.图层混合模式快捷键:正常(Shift + Option + N),正片叠底(Shift + Option + M),滤色(Shift + Option + S),叠加(Shift + Option + O),柔光(Shift + Option + F),饱和度(Shift + Option + T),颜色(Shift + Option + C),明度(Shift + Option + Y). 2.混合模式循环热键(Shift + – /+):该组快捷键方便你在整套混合

100*100像素的bmp图片缩小为20*30大小的bmp图片是怎样的原理 ?

问题描述 100*100像素的bmp图片缩小为20*30大小的bmp图片是怎样的原理 ? 百度的答案好像说是涉及傅里叶算法,没有搞明白,求大神说明原理,是相邻的几个像素平均成一个像素? 解决方案 这类算法很多,基本原理是"映射".就是说这个算法定义了如何把一个像素点映射到目标像素点.比如一个10x10的图片,你想把它拉成20x20的图片,你可以设计一个最简单的算法,把(x,y)[x,y从1开始]映射到(2x-1,2y-1)(2x-1,2y)(2x,2y-1)(2x,2y)这四个点. 解

[Qt教程] 第20篇 2D绘图(十)图形视图框架(下)

[Qt教程] 第20篇 2D绘图(十)图形视图框架(下) 楼主  发表于 2013-5-4 15:43:02 | 查看: 861| 回复: 0 图形视图框架(下) 版权声明 该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语 环境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2 目录 三.场景(QGraphicsScene) (一)场景层 (二)索引算法 (三)边界矩形 (四)图形项查找 (五)事件处理和传播 (

20 本优秀的 Python 电子书

想要学习Python编程语言的读者有大量相关书籍可供选择,有印刷版也有电子版,而Python是一门开源的编译语言,开发者也提供了不少免费可自由下载的Python电子书.本文挑选其中最优秀的20本Python电子书,内容覆盖了Python的一般介绍,游戏开发,编程技巧,儿童编程学习等类别,它们大多数都采用了创作共用署名非商业许可证,如<Think Python>.<Invent Your Own Computer Games with Python>.<笨方法学Python第二

表达式-/ 100 + 3 * - 2 4 / 20 10

问题描述 / 100 + 3 * - 2 4 / 20 10 已知一个表达式的后缀形式是/ 100 + 3 * - 2 4 / 20 10求它的前缀形式? 解决方案 这就是前缀吧中缀是 100/(3+((2-4)*20/10))后缀 100 3 2 4 - 20 * 10 / + /

影响中国软件20人

[1]严援朝 所属公司:新浪网 入选理由:开发第一个中文操作系统CCDOS,参与创办四通利方,掌控最大的中文网站新浪网技术总架构. "做软件就是在不断地明确目标,就是搞清楚你的GO 是什么,所有的软件都逃不出那三句话--IF.THEN. ELSE.棒的程序员很快能够知道自己的GO是什么,没长进的程序员老也弄不清楚自己到底要干嘛,所以永远处在 学习过程中,手里永远拿着一本书,永远在学,永远也学不会."这是严援朝很经典的一句话,甚至有程序员把这作为自己的座右铭.作为中国第一代程序员的象征,