UVA-10410 Tree Reconstruction (树重建)
题目大意:给出对一棵树的BFS遍历序列和DFS遍历序列,求出每一个节点的子节点。
题目分析:在BFS的序列中,子节点的下标一定比父节点的下标至少大1(根节点与第一个子节点除外),即pos[fa]+1<pos[son]。当节点u、v满足pos[u]+1==pos[v]时,u和v为兄弟节点。只需循环一遍DFS序列便可递归的找出所有节点的子节点。循环一遍DFS序列实际上就是一个深搜的过程。
代码如下:
# include<iostream>
# include<cstdio>
# include<vector>
# include<stack>
# include<cstring>
# include<algorithm>
using namespace std; vector<int>v[1001];
int pos[1001];
stack<int>s; int main()
{
int n,a;
while(~scanf("%d",&n))
{
for(int i=1;i<=n;++i){
scanf("%d",&a);
v[i].clear();
pos[a]=i;
} while(!s.empty())
s.pop();
int root;
scanf("%d",&root);
s.push(root);
for(int i=1;i<n;++i){
scanf("%d",&a);
while(1){
int u=s.top();
if(u==root||pos[u]+1<pos[a]){///pos[u]+1==pos[a]时,u和a为兄弟节点
v[u].push_back(a);
s.push(a);///深搜又加深了一层
break;///一旦找到a的父节点便找序列中的下一个节点的父节点
}else
s.pop();
}
} for(int i=1;i<=n;++i){
printf("%d:",i);
int l=v[i].size();
for(int j=0;j<l;++j)
printf(" %d",v[i][j]);
printf("\n");
}
}
return 0;
}
UVA-10410 Tree Reconstruction (树重建)的更多相关文章
- UVA - 10410 Tree Reconstruction (根据dfs序和bfs序恢复一颗树)
题意: 分析: 这题一开始完全没有思路, 一直没有找出规律. 参考了http://www.cnblogs.com/Wade-/p/6358859.html 和 http://www.cnblogs.c ...
- UVA 10410 Tree Reconstruction
题意: 给定一个树的BFS和DFS,求这棵树. 分析: 拿dfs的序列,分成若干段,每一段相当一个子树,这样就可以利用bfs的序列去将dfs的序列分段,然后利用一个队列去存放每一段,不断求出子树即可. ...
- UVA - 10410 Tree Reconstruction(栈处理递归)
题目: 给出一棵树的BFS和DFS序列,输出这棵树中每个结点的子结点列表.BFS和DFS序列在生成的时候,当一个结点被扩展时,其所有子结点应该按照编号从小 到大的顺序访问. 思路: 一开始是想根据BF ...
- UVa 10410 树重建
Tree Reconstruction Problem Description You have just finished a compiler design homework question w ...
- UVA.548 Tree(二叉树 DFS)
UVA.548 Tree(二叉树 DFS) 题意分析 给出一棵树的中序遍历和后序遍历,从所有叶子节点中找到一个使得其到根节点的权值最小.若有多个,输出叶子节点本身权值小的那个节点. 先递归建树,然后D ...
- 【构造题 贪心】cf1041E. Tree Reconstruction
比赛时候还是太慢了……要是能做快点就能上分了 Monocarp has drawn a tree (an undirected connected acyclic graph) and then ha ...
- Mysql存储引擎之TokuDB以及它的数据结构Fractal tree(分形树)
在目前的Mysql数据库中,使用最广泛的是innodb存储引擎.innodb确实是个很不错的存储引擎,就连高性能Mysql里都说了,如果不是有什么很特别的要求,innodb就是最好的选择.当然,这偏文 ...
- 页面设计--Tree目录树
Tree目录树控件属性: 根据数据集合来配置相应的信息 加载模式有自动加载.自定加载 web中显示效果图:
- [转] Splay Tree(伸展树)
好久没写过了,比赛的时候就调了一个小时,差点悲剧,重新复习一下,觉得这个写的很不错.转自:here Splay Tree(伸展树) 二叉查找树(Binary Search Tree)能够支持多种动态集 ...
- CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划)
CJOJ 1976 二叉苹果树 / URAL 1018 Binary Apple Tree(树型动态规划) Description 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的 ...
随机推荐
- POJ 2240 Arbitrage【Bellman_ford坑】
链接: http://poj.org/problem?id=2240 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22010#probl ...
- Linux设置程序开机启动-tomcat开机启动
假设我有一个tomcat应用需要开机启动. 前提你的JAVA环境变量已经配置好没有问题,检测方法如图 然后找到tomcat的目录,我的目录是 /home/yuqing_4.0/tomcat_share ...
- WebStorm mac下如何安装WebStorm + 破解
1.下载软件最好的地址就是官网了下载地址 选择好系统版本以后点击DOWNLOAD 下载Webstorm 2.安装双击下载好的安装包.将WebStromt拖入application文件夹,然后在La ...
- windows下和linux下libcurl安装
下载源代码,在winbuild里面有个说明文件: Building with Visual C++, prerequisites==================================== ...
- 5.4 Components -- Wrapping Content in A Component(在组件中包裹内容)
1.有时候,你可能希望定义一个模板,它包裹其他模板提供的内容. 例如,假设我们创建一个blog-post模板,我们可以使用它来展现一个blog post: app/components/blog-po ...
- idea中使用插件Grep Console在IDEA的log的不同的级别,可以设置不同的颜色。
一.安装. 1. 2. 3. 二,使用. 1. 2.
- Bootstrap fileinput v2.0(ssm版)
前言bootstrap fileinput是一个很好的文件上传插件.但是官方不出api,这就尴尬了.百度一下,每个人写法都不相同,好多代码本身都是错的.我修改后才能跑起来.综上所述:所以今天我摸索了一 ...
- sql server 将时间中的时分秒改为00:00:00
select convert(varchar(10),getdate(),120
- VS2010/MFC编程入门之十七(对话框:文件对话框)
上一讲鸡啄米介绍的是消息对话框,本节讲解文件对话框.文件对话框也是很常用的一类对话框. 文件对话框的分类 文件对话框分为打开文件对话框和保存文件对话框,相信大家在Windows系统中经常见 ...
- 39XML文档类
Xml源代码 domxml.h #ifndef DOMXML_H #define DOMXML_H #include <QString> #include <QStringList& ...