吝啬的国度(dfs+vector)
吝啬的国度
- 描述
- 在一个吝啬的国度里有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
题解:vector建图;pre数组记录;
代码:#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
const int MAXN=;
vector<int>vec[MAXN];
int pre[MAXN],s;
#define mem(x) memset(x,0,sizeof(x))
void dfs(int x){
for(int i=;i<vec[x].size();i++){
int b=vec[x][i];
if(!pre[b]){
pre[b]=x;
dfs(b);
}
}
}
int main(){
int T,N,x,y;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&s);
mem(pre);
for(int i=;i<=N;i++)vec[i].clear();
for(int i=;i<N;i++){
scanf("%d%d",&x,&y);
vec[x].push_back(y);
vec[y].push_back(x);
}
dfs(s);
pre[s]=-;
for(int i=;i<=N;i++){
if(i!=)printf(" ");
printf("%d",pre[i]);
}
puts("");
}
return ;
}这种方法wa,但是不知道为什么:
#include<stdio.h>
#include<string.h>
#include<vector>
using namespace std;
const int MAXN=;
vector<int>vec[MAXN];
int pre[MAXN],s;
#define mem(x) memset(x,0,sizeof(x))
int print(int x){
for(int i=;i<vec[x].size();i++){
int b=vec[x][i];
return b;
}
return -;
}
int main(){
int T,N,x,y;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&s);
for(int i=;i<=N;i++)vec[i].clear();
for(int i=;i<N;i++){
scanf("%d%d",&x,&y);
vec[y].push_back(x);
}
for(int i=;i<=N;i++){
if(i!=)printf(" ");
printf("%d",print(i));
}
puts("");
}
return ;
}
吝啬的国度(dfs+vector)的更多相关文章
- NYOJ 20.吝啬的国度-DFS+STL(vector保存上一节点)
整理代码 吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第 ...
- 【ACM】吝啬的国度 - DFS (图)
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...
- 吝啬的国度 ---用vector 来构图
根据题目可以看出来 有n 个城市 只有 n-1 条路线 那么 就可以确定这个图中 不存在 圆 所以从一个点到另一个点 只有一条唯一的路 所以从一个节点到另一个节点 那么 这个节点只有一个唯 ...
- Nyoj 吝啬的国度(图论&&双DFS)
描述在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市,必须经过的前一个城市是几号城市(假设你 ...
- nyist 20 吝啬的国度(dfs)
吝啬的国度 题目描述: 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来. 现在,Tom在第S号城市,他有张该国地图,他想知道如果自己要去参观第T号城市, 必须经过的前一 ...
- nyoj20_吝啬的国度_DFS
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...
- nyoj 20 吝啬的国度
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...
- NYoj_20吝啬的国度
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市,他有 ...
- 吝啬的国度 nyoj
吝啬的国度 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 在一个吝啬的国度里有N个城市,这N个城市间只有N-1条路把这个N个城市连接起来.现在,Tom在第S号城市, ...
随机推荐
- 联系InfoSphere Streams和OpenMI时对水利模型联系的设计模式的一些考虑
从<时序计算通用模型接口 OpenMI开发技术及应用>一书中的第一章的对接口要求描述,我想到InfoSphere streams的流数据处理模式刚好可以满足这种模型/数据之间对接的需求. ...
- hive集群安装配置
hive 是JAVA写的的一个数据仓库,依赖hadoop.没有安装hadoop的,请参考http://blog.csdn.net/lovemelovemycode/article/details/91 ...
- HDU 3468 Treasure Hunting(BFS+网络流之最大流)
题目地址:HDU 3468 这道题的关键在于能想到用网络流.然后还要想到用bfs来标记最短路中的点. 首先标记方法是,对每个集合点跑一次bfs,记录全部点到该点的最短距离.然后对于随意一对起始点来说, ...
- .net 文件下载
/** 输入参数* _Request: Page.Request 对象* _Response: Page.Response 对象* _fileName: 下载文件名* _fullPath: 带文件名下 ...
- SQL Server索引进阶:第十二级,创建,修改,删除
在第十级中我们看到了索引的内部结构,在第十一级中我们看到了平衡树结构潜在的负面影响:索引碎片.有了索引内部结构的知识,我们可以检查在执行数据定义语句和数据操作语句的时候,都发生了什么.在本级中我们介绍 ...
- C#按钮客户端验证
OnClientClick="return confirm('是否确定排除?');"
- 关于消息推送和service的一些调查-清理内存通知栏点击无响应
起因:做了两个带推送的app:HiApp和WeApp,前者个推,后者百度推送,但前者有一个小缺陷. 现象:两部手机 1.htcD820t手机,运行中的app利用自带的关闭最近程序后,通知栏不清理该ap ...
- Matlab中K-means聚类算法的使用(K-均值聚类)
K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Kmeans(X,K) [Idx, ...
- 制作U盘启动盘(以CentOS6.3为例)
借助UltraISO(软碟通),自己百度下载一个即可(同样适用于制作Windows启动盘). 选择文件→打开,选择ISO镜像所在目录,如下两幅图所示:
- 在MAC下使用github
一 安装git 这个咱们就不说了,一般安装xcode都会自带git 如果不知道有没有下载git, 在终端运行 $which git 会打印出git的安装路径 /usr/local/bin/gi ...