题目描述:
  在一个吝啬的国度里有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
题目大意:
     n个城市,n-1条无向边,问从s城市到其他城市的前一个城市的编号。
解题思路:
     利用深度优先搜索,从s点开始搜起。节点个数的数据过大所以不能用邻接矩阵存边
     我这里用的容器(vector)模拟邻接表的存储。
AC代码:
 #include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector> using namespace std; int f[]; // 记录到达每个城市的前一个城市的节点
vector< int> vec[]; // 用容器模拟邻接表存储边的信息
void dfs(int x)
{
int len = vec[x].size(); // 计算出和x城市相连的城市个数
for (int i = ; i < len; i ++)
{
if (f[vec[x][i]]) // 不走重复的路
continue;
f[vec[x][i]] = x;
dfs(vec[x][i]);
}
}
int main ()
{
int t,n,s,i,j,a,b;
scanf("%d",&t);
while (t --)
{
memset(f,,sizeof(f));
memset(vec,,sizeof(vec));
scanf("%d%d",&n,&s);
for (i = ; i < n-; i ++)
{
scanf("%d%d",&a,&b); // 无向边
vec[a].push_back(b);
vec[b].push_back(a);
}
f[s] = -; dfs(s);
printf("%d",f[]);
for (i = ; i <= n; i ++)
printf(" %d",f[i]);
printf("\n");
}
return ;
}

nyist 20 吝啬的国度(dfs)的更多相关文章

  1. NYOJ 20.吝啬的国度-DFS+STL(vector保存上一节点)

    整理代码 吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第 ...

  2. nyoj 20 吝啬的国度

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  3. 吝啬的国度(dfs+vector)

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  4. 【ACM】吝啬的国度 - DFS (图)

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  5. nyoj 题目20 吝啬的国度

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

  6. NYOJ 20 吝啬的国度 (深搜)

    题目链接 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号 ...

  7. NYOJ题目20吝啬的国度

    -----------------------------------------n-1条边的无向连通图是一棵树,又因为树上两点之间的路径是唯一的,所以解是唯一的.(注意并不一定是二叉树,所以最好采用 ...

  8. Nyoj 吝啬的国度(图论&&双DFS)

    描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你 ...

  9. nyoj20_吝啬的国度_DFS

    吝啬的国度 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...

随机推荐

  1. python学习,day3:集合的学习

    集合天生去重,另外集合非常便于两组数字的取交集,并集等计算 # coding=utf-8 # Author: RyAn Bi list_1 =[1,2,3,4,5,6,7] list_1 =set(l ...

  2. cucumber & selenium & bddtest

    目录 1.Cucumber介绍 refer link: 2.使用步骤 2.1 引入依赖 2.2新建test.future文件 2.3在resource目录下创建cucumber.bat,执行bat,c ...

  3. 理解session和cookie

    Session 与 Cookie 的作用都是为了保持访问用户与后端服务器的交互状态.它们有各自的优点,也有各自的缺陷,然而具有讽刺意味的是它们的优点和它们的使用场景又是矛盾的.例如,使用 Cookie ...

  4. CentOS6.4 安装sftp

    1.打开命令终端窗口,按以下步骤操作.使用ssh -V 命令来查看openssh的版本,版本必须大于4.8p1,低于的这个版本需要升级. [root@ecs-3c46 ~]# ssh -v OpenS ...

  5. 大数据技术之_16_Scala学习_13_Scala语言的数据结构和算法_Scala学习之旅收官之作

    第十九章 Scala语言的数据结构和算法19.1 数据结构(算法)的介绍19.2 看几个实际编程中遇到的问题19.2.1 一个五子棋程序19.2.2 约瑟夫问题(丢手帕问题)19.2.3 其它常见算法 ...

  6. 在VIM中添加行号的方法

    VIM编辑器是可以显示行号的.但是,有时候我们需要在整个代码的行首添加行号.怎么实现呢?实现的方法有很多,这里就介绍我知道的一种吧. 在每行行首添加某个字符串 :%s/^/your_string/ 在 ...

  7. VS2008默认的字体居然是 新宋体

    本人还是觉得 C#就是要这样看着舒服

  8. JavaEE 7 最全教程集锦(转)

    转自 http://www.iteye.com/news/28009 甲骨文公司已经在6月份正式发布了JavaEE 7,该版本带来了诸多新的规范及特性,将企业级开发提升到了一个新的层次. Java E ...

  9. 前端标注软件-pxcook像素大厨使用心得

    我们在日常开发过程中,设计师给提供的UI图,经常需要标注尺寸,有时候设计师难免会遗漏标注,这样就会大大的增加我们的沟通成本,因此,使用一款好用的标注软件就尤为重要,我推荐这款标注软件---pxcook ...

  10. redis(6)lua脚本

    一.lua脚本 lua是一种轻量小巧的脚本语言,用标准的C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能. lua的详细内容你可以参考lua官方网站 ...