吝啬的国度

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

此题应该用dfs或bfs
dfs代码如下
 #include <cstdio>
#include <vector>
#include <cstring> using namespace std; vector<int> path[];
int pre[]; int N, S; void dfs(int start) {
int cnt = path[start].size();
for(int i = ; i < cnt;i++) {
int p = path[start][i];
if(pre[p] == ) {
pre[p] = start;
dfs(p);
} }
}
int main(int argc, char const *argv[])
{
int M;
//freopen("input.txt","r",stdin);
scanf("%d",&M);
while(M--) {
memset(path, , sizeof(path));
memset(pre, , sizeof(pre));
scanf("%d %d",&N,&S);
for(int i = ; i < N-; i++) {
int x,y;
scanf("%d %d",&x,&y);
path[x].push_back(y);
path[y].push_back(x);
}
pre[S] = -;
dfs(S);
printf("%d", pre[]);
for(int i = ; i <= N; i++) {
printf(" %d",pre[i]);
}
puts("");
}
return ;
}

bfs代码如下

 #include <cstdio>
#include <vector>
#include <cstring>
#include <queue>
using namespace std; vector<int> path[];
int pre[];
queue <int> que;
int N, S; int main(int argc, char const *argv[])
{
int M;
//freopen("input.txt","r",stdin);
scanf("%d",&M);
while(M--) {
memset(path, , sizeof(path));
memset(pre, , sizeof(pre));
scanf("%d %d",&N,&S);
for(int i = ; i < N-; i++) {
int x,y;
scanf("%d %d",&x,&y);
path[x].push_back(y);
path[y].push_back(x);
}
pre[S] = -;
que.push(S); while(!que.empty()) {
int p0 = que.front();que.pop();
int cnt = path[p0].size();
for(int i = ; i < cnt;i++) {
int p = path[p0][i];
if(pre[p] == ) {
pre[p] = p0;
que.push(p);
}
}
}
printf("%d", pre[]);
for(int i = ; i <= N; i++) {
printf(" %d",pre[i]);
}
puts("");
}
return ;
}

nyoj 题目20 吝啬的国度的更多相关文章

  1. NYOJ题目20吝啬的国度

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

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

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

  3. nyoj 20 吝啬的国度

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

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

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

  5. nyist 20 吝啬的国度(dfs)

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

  6. NYIST OJ 题目20 吝啬的王国

    DFS水题.题意说明了这是一颗树,那么只要按照根节点DFS下去就好了,DFS的时候记录一下当前在哪个结点,还有父节点是谁,就AC了! #include<cstdio> #include&l ...

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

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

  8. ACM题目————吝啬的国度

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

  9. 吝啬的国度 nyoj

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

随机推荐

  1. Python参数基础

    Python参数基础 位置参数 ​ 通过位置进行匹配,把参数值传递给函数头部的参数名称,顺序从左到右 关键字参数 ​ 调用的时候使用参数的变量名,采用name=value的形式 默认参数 ​ 为没有传 ...

  2. 富文本编辑器Ueditor的使用

    1.下载:http://ueditor.baidu.com/website/download.html. 2.解压,并放到项目webapp下. 3.jsp页面的配置. 4.配置根路径. 5.页面展示: ...

  3. World Wind Java开发之十二——加载粗制三维模型(ExtrudedPolygon)(转)

    ww可以根据DLG图批量生成假三维模型,这对于小区等特征相似的建筑物模型的构建是非常有用的.下面来看如何一步步实现假三维模型的加载: 1.Shp文件的制作 首先在arcmap下数字化几个建筑物,并新建 ...

  4. Android(java)学习笔记96:layout_weight使用注意事项

    1. android:layout_weight使用说明: layout_weight是权重的意思,也就是各个控件所占的比重,用在LinearLayout布局中.当我们使用layout_weight的 ...

  5. .net网站的下载地址

    .net4.0网址:http://www.crsky.com/soft/6959.htmlsql server r2: http://pan.baidu.com/share/link?shareid= ...

  6. java打包打包

    http://blog.sina.com.cn/s/blog_6b9dcc870101k8xq.html 上面说的最后一种方法,不太对. 下面这个可以 Try the fat-jar extensio ...

  7. C#图片上传获取二进制流保存至AD

    <form id="form1" runat="server"> <div> <asp:FileUpload ID="F ...

  8. C#箴言之用属性来访问类的私有成员

    在程序中,难免要访问某个对象的私有成员.那么以前实现这类功能的方法有两种,第一种方法最简单,就是把成员访问符从“private”改为“public”即可:而另一个就是提供公有的成员访问函数来进行访问. ...

  9. C# StreamWriter对像

    用FileWriter来随机读取文件是个好主意,而用StreamWriter可以直接把字符串写入文件中,它处理重要的转换和向FileStream对像写入工作.创建StreamWriter有很多方法: ...

  10. 自封装的AJAX

    /* * *create by royal in 2019/1/23 * *royalAjax 自封装ajax函数 * *paramsObj JSON类型参数 *require params: * t ...