吝啬的国度

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

思路:深度优先算法

#include <iostream>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector> using namespace std;
int *a;
vector<int> *v;
int m; void DFS(int cur){ for (int i = ; i < v[cur].size() ;i++)
{
if (a[v[cur][i]]!=)
{
continue;
}
a[v[cur][i]] = cur;
DFS(v[cur][i]);
} } int main(){ int n;
cin>>n;
while (n--)
{
int cur;
cin>>m>>cur; a = new int[m+];
for (int z = ; z < m+ ; z++)
{
a[z] = ;
}
v = new vector<int>[m+];
int x,y;
for (int i = ; i < m ; i++)
{
cin>>x>>y;
v[x].push_back(y);
v[y].push_back(x);
} DFS(cur);
int k;
for (k = ; k < m- ;k++)
{
if (k+==cur)
{
cout<<"-1 ";
}else
{
cout<<a[k+]<<" ";
}
}
if (k+==cur)
{
cout<<"-1"<<endl;
}
else
{
cout<<a[k+]<<endl;
}
} return ;
}

最新文章

  1. HTTP &amp; HTTPs
  2. ListView滑动位置精准记忆
  3. Java基础(40):Java中的集合介绍---Collection与Map
  4. HDU 4462
  5. Linux驱动设计—— 驱动调试技术
  6. 为什么 Apple 开发者网站关闭是件好事?
  7. mysql安装篇
  8. 8、双向一对多的关联关系(等同于双向多对一。1的一方有对n的一方的集合的引用,同时n的一方有对1的一方的引用)
  9. Shell中的变量
  10. 005 列表以及append,extend方法
  11. grub配置文件grub.conf详细说明
  12. JAVA基础编程50题(10-12题)具体解释
  13. APUE读书笔记:关于sigsuspend
  14. 关于Verilog HDL的一些技巧、易错、易忘点(不定期更新)
  15. JS的进阶技巧
  16. eclipse在mac上的快捷键
  17. bzoj 1452: [JSOI2009]Count (二维树状数组)
  18. POJ 1014 Dividing (多重可行性背包)
  19. 读书笔记_Effective_C++_条款三十七:绝不重新定义继承而来的缺省参数值
  20. Eclipse折叠代码 coffee bytes code folding

热门文章

  1. Django 发布
  2. stm32之外设控制
  3. linux命令-vim一般模式下光标移动
  4. python的语法糖
  5. Material使用06 自定义主题、黑夜模式\白天模式切换
  6. 安装json format插件
  7. Struts2学习第三课 访问Web资源
  8. hdu1056
  9. 如何保持blog的高质量(相对于自己的进步而言的)
  10. web.config中authorization下的location中的path的设置 (转)