NYOJ 20

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

 

吝啬的国度

时间限制: 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      

 

目录
相关文章
|
7月前
|
算法
NYOJ-448-寻找最大数
NYOJ-448-寻找最大数
32 0
|
人工智能 算法
|
JavaScript
NYOJ&#160;17
时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0 随后的n行,每行有一个字符串,该字符串的长度不会超过10000 输出 输出字符串的最长递增子序列的长度 样例输入 3 aaa ababc abklmncdefg 样例输出 1 3 7 题目很经典,学习一下吧。
673 0
|
人工智能 测试技术
NYOJ&#160;79
拦截导弹 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 某国为了防御敌国的导弹袭击,发展中一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意 的高度,但是以后每一发炮弹都不能高于等于前一发的高度。
962 0
|
人工智能
NYOJ 461
  Fibonacci数列(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:4   描述 数学神童小明终于把0到100000000的Fibonacci数列(f[0]=0,f[1]=1;f[i] = f[i-1]+f[i-2](i>=2))的值全部给背了下来。
726 0
NYOJ 93
  汉诺塔(三) 时间限制:3000 ms | 内存限制:65535 KB 难度:3   描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针。
601 0
|
测试技术
NYOJ 523
  亡命逃窜 时间限制:1000 ms | 内存限制:65535 KB 难度:4   描述   从前有个叫hck的骑士,为了救我们美丽的公主,潜入魔王的老巢,够英雄吧。不过英雄不是这么好当的。
918 0
|
网络协议
NYOJ 8
  一种排序 时间限制:3000 ms | 内存限制:65535 KB 难度:3   描述 现在有很多长方形,每一个长方形都有一个编号,这个编号可以重复;还知道这个长方形的宽和长,编号、长、宽都是整数;现在要求按照一下方式排序(默认排序规则都是从小到大);1.
800 0
|
人工智能
NYOJ 55
  懒省事的小明 时间限制:3000 ms | 内存限制:65535 KB 难度:3   描述 小明很想吃果子,正好果园果子熟了。在果园里,小明已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。
957 0