20-吝啬的国度

内存限制:64MB
时间限制:1000ms
Special Judge: No

accepted:12
submit:43

题目描述:

在一个吝啬的国度里有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

拓展:
  free对内存进行释放,主要是将malloc、new、realloc等申请的内存进行释放
  STL中的vector是进行动态内存的追加,用free进行内存释放会使编译器不清楚从哪开始释放 分析:
  ①、在数据结构方面我们选择二维vector,用vector来存对应城市相邻的城市,用.size()就可以得到与该城市相邻的城市个数
  ②、因为DFS是线性的、回溯型搜索方式,将会直接或回溯式的找到前面直接相邻的城市 步骤、
  ①、通过vector建立两个城市的双向距离关系
  ②、使用dfs从入口点s进入,将每一个相邻城市的前驱都赋值为对应的s 核心代码:
  
 void dfs(int s)
{
for(int i = ; i < A[s].size(); ++ i)
{
if(f[A[s][i]]) continue;
f[A[s][i]] = s;
dfs(A[s][i]);
}
}

C/C++代码实现(AC):

 #include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <stack>
#include <map>
#include <queue> using namespace std;
const int MAXN = 1e5 + ;
int f[MAXN];
vector <int> A[MAXN]; void init(int n)
{
while(n --)
{
int a, b;
scanf("%d%d", &a, &b);
A[a].push_back(b);
A[b].push_back(a);
}
} void dfs(int s)
{
for(int i = ; i < A[s].size(); ++ i)
{
if(f[A[s][i]]) continue;
f[A[s][i]] = s;
dfs(A[s][i]);
}
} int main()
{
int t;
scanf("%d", &t);
while(t --)
{
int n, s;
memset(f, , sizeof(f));
memset(A, , sizeof(A));
scanf("%d%d", &n, &s);
init(n - ); dfs(s);
f[s] = -;
for(int i = ; i < n; ++ i)
printf("%d ", f[i]);
printf("%d\n",f[n]);
}
return ;
}

最新文章

  1. Struts2 文件上传和文件下载
  2. 假期实践作业:从IT角度看地铁
  3. fopen的第一个参数不能有&#39;\n&#39;
  4. [MacOS] xcrun: error: active developer path (&quot;/Volumes/Xcode/Xcode6-Beta.app/Contents/Developer&quot;) does not exist, use xcode-select to change
  5. 《shell脚本if..then..elif..then.if语句的总结》
  6. android 设置gridView item的高度
  7. LeetCode 122. Best Time to Buy and Sell Stock II (买卖股票的最好时机之二)
  8. Oracle 给予访问其他用户包的权限
  9. 【转】从源码分析Handler的postDelayed为什么可以延时?
  10. java 命令查字节码文件, 查.class文件内容
  11. Shovel Sale CodeForces - 899D (数位dp)
  12. go微服务框架go-micro深度学习 rpc方法调用过程详解
  13. 原生js格式化json工具
  14. c#.net基础
  15. RN中移动组件开发
  16. bzoj2909: Bipartite Numbers
  17. Redis学习系列六ZSet(有序列表)及Redis数据结构的过期
  18. [AHOI2013]作业
  19. 项目Beta冲刺(团队)总结
  20. Smart Pointer 智能指针

热门文章

  1. 基于STL的堆略解
  2. Ceph Paxos相关代码解析
  3. google hack 语法
  4. 2.单核CPU是如何实现多进程的?
  5. python列表与集合,以及循环时的注意事项
  6. vue 代码迁移的坑
  7. django-表单之模型表单(三)
  8. .NET进阶篇05-Linq、Lambda表达式
  9. SpringBoot 逻辑异常统一处理
  10. Jenkins 2.60.x 2种发送邮件方式