题目链接:点击打开链接

题意:

给定n个节点的树

1为根

则此时叶子节点已经确定

最后一行给出叶子节点的顺序

目标:

遍历树并输出路径。要求遍历叶子节点时依照给定叶子节点的先后顺序訪问。

思路:

给每一个节点加一个优先级。

把最后一个叶子节点到父节点的路径上的点优先级改为1

把倒数第二个叶子节点到父节点的路径上的点优先级改为2

如此每一个点就有一个优先级,每一个訪问儿子节点时先訪问优先级大的就可以

对于无解的推断:得到的欧拉序列不满足输入的叶子节点顺序即是无解。

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <math.h>
#include <set>
#include <vector>
#include <map>
using namespace std;
#define ll int
#define N 310
ll n;
vector<ll>G[N];
int fa[N], du[N];
void dfs(int u,int father){
fa[u] = father;
for(int i = 0; i < G[u].size(); i++) {
int v = G[u][i]; if(v==father)continue;
dfs(v,u);
}
}
int val[N], Stack[N<<1], top;
bool cmp(int a,int b) {
return val[a]>val[b];
}
void work(int u, int father) {
Stack[top++] = u;
vector<int>son;
son.clear();
for(int i = 0; i < G[u].size(); i++){
int v = G[u][i]; if(v==father)continue;
son.push_back(v);
}
sort(son.begin(), son.end(), cmp);
for(int i = 0; i < son.size(); i++) {
work(son[i], u);
Stack[top++] = u;
}
}
vector<int>input;
bool ok(){
int u = 0;
for(int i = 0; i < top; i++)
if(Stack[i]==input[u])
u++;
return u >= input.size();
}
int main(){
ll i,j,u,v;
while(cin>>n){
input.clear();
memset(du, 0, sizeof du);
for(i = 1; i <= n; i++)
G[i].clear();
for(i = 1; i < n; i++) {
scanf("%d %d",&u,&v);
G[u].push_back(v);
G[v].push_back(u);
du[u]++; du[v]++;
}
int leaf = 0;
for(i = 2; i <= n; i++)
if(du[i]==1)
leaf++;
dfs(1,-1);
for(i = leaf; i; i--) {
scanf("%d",&u);
input.push_back(u);
while(u!=-1){
val[u] = i;
u = fa[u];
}
}
top = 0;
work(1,-1);
if(ok()) {
<span style="white-space:pre"> </span>for(i = 0; i < top; i++)
printf("%d%c",Stack[i],i==top-1?'\n':' ');
}
else puts("-1");
}
return 0;
}

Codeforces 29D Ant on the Tree 树的遍历 dfs序的更多相关文章

  1. codeforces 29D Ant on the Tree (dfs,tree,最近公共祖先)

    D. Ant on the Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  2. POJ 3321 Apple Tree (树状数组+dfs序)

    题目链接:http://poj.org/problem?id=3321 给你n个点,n-1条边,1为根节点.给你m条操作,C操作是将x点变反(1变0,0变1),Q操作是询问x节点以及它子树的值之和.初 ...

  3. CodeForces 29D Ant on the Tree

    洛谷题目页面传送门 & CodeForces题目页面传送门 题意见洛谷里的翻译. 这题有\(\bm3\)种解法,但只有一种是正解(这不是废话嘛). 方法\(\bm1\):最近公共祖先LCA(正 ...

  4. E - Apple Tree(树状数组+DFS序)

    There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. ...

  5. BZOJ.2434.[NOI2011]阿狸的打字机(AC自动机 树状数组 DFS序)

    题目链接 首先不需要存储每个字符串,可以将所有输入的字符依次存进Trie树,对于每个'P',记录该串结束的位置在哪,以及当前节点对应的是第几个串(当前串即根节点到当前节点):对于'B',只需向上跳一个 ...

  6. 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序

    [题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...

  7. luogu SP8093 后缀自动机+树状数组+dfs序

    这题解法很多,简单说几个: 1. 线段树合并,时间复杂度是 $O(nlog^2n)$ 的. 2. 暴力跳 $fail,$ 时间复杂度 $O(n\sqrt n),$ 比较暴力. 3. 建立后缀树后在 $ ...

  8. Codeforces 375D Tree and Queries(DFS序+莫队+树状数组)

    题目链接  Tree and Queries 题目大意  给出一棵树和每个节点的颜色.每次询问$vj, kj$ 你需要回答在以$vj$为根的子树中满足条件的的颜色数目, 条件:具有该颜色的节点数量至少 ...

  9. HDU5293(SummerTrainingDay13-B Tree DP + 树状数组 + dfs序)

    Tree chain problem Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Other ...

随机推荐

  1. javaMybatis映射属性,高级映射

    映射文件的sql属性: id:标识符(一般都是dao层方法名) resultType:sql返回类型 resultMap:放回的映射类型 parameterType:参数类型 useGenerated ...

  2. vim7.3中文乱码问题

    在测试机安装vim7.3之后编辑中文文本出现乱码问题. vim在编译安装的时候: ./configure --enable-gdb --enable-multibyte --enable-cscope ...

  3. 如何开发一个chrome扩展

    chrome是一个不错的浏览器,web开发者工作中一般都会使用chrome做为默认浏览器,它有很多扩展,给浏览器补充了各种功能,增强了用户体验.chrome具体能干什么?怎么做出来的呢? chrome ...

  4. StackExchange.Redis学习笔记(三) 数据库及密码配置 GetServer函数

    这一章主要写一些StackExchange.Redis的配置及不太经常用到的函数 数据库连接 下面是我的连接字符串,里面指定了地址,密码,及默认的数据库 Redis启动后默认会分成0-15个数据库,不 ...

  5. Zabbix服务网页报错汇总

    第1章 Zabbix简介及组成 1.1 zabbix简介 zabbix是一个基于web界面,提供分布式系统监视以及网络监视功能的企业级的开源解决方案.它可以监视各种网络参数,保证服务器自动的安全运营, ...

  6. 【Java】单词倒序输出

    如何将一段单词倒序输出?把"Hello Java Hello China"变成"China Hello Java Hello"? 看起来好像很简单,只需要把字符 ...

  7. RSA非对称加密简析-java

    1 非对称加密算法 1.1 概述 1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这 ...

  8. Lua脚本在C++下的舞步

    我是一名C++程序员,所以在很多时候,不想过多的使用Lua的特性,因为个人感觉,Lua的语法要比C++的更加灵活.而我更希望,在函数调用的某些习惯上,遵循一些C++的规则.好了,废话少说,我们先来看一 ...

  9. Less的嵌套规则

    Less的嵌套规则 在使用标准CSS时,要为多层嵌套的元素定义样式,要么使用后代选择器从外到内的嵌套定义,要么给这个元素加上类名或 id 来定义.这样的写法虽然很好理解,但维护起来很不方便,因为无法清 ...

  10. opencv摄像头捕获图像

    #include <iostream> #include <opencv2/opencv.hpp> using namespace cv; using namespace st ...