Codeforces 29D Ant on the Tree 树的遍历 dfs序
题目链接:点击打开链接
题意:
给定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序的更多相关文章
- 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 ...
- POJ 3321 Apple Tree (树状数组+dfs序)
题目链接:http://poj.org/problem?id=3321 给你n个点,n-1条边,1为根节点.给你m条操作,C操作是将x点变反(1变0,0变1),Q操作是询问x节点以及它子树的值之和.初 ...
- CodeForces 29D Ant on the Tree
洛谷题目页面传送门 & CodeForces题目页面传送门 题意见洛谷里的翻译. 这题有\(\bm3\)种解法,但只有一种是正解(这不是废话嘛). 方法\(\bm1\):最近公共祖先LCA(正 ...
- 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. ...
- BZOJ.2434.[NOI2011]阿狸的打字机(AC自动机 树状数组 DFS序)
题目链接 首先不需要存储每个字符串,可以将所有输入的字符依次存进Trie树,对于每个'P',记录该串结束的位置在哪,以及当前节点对应的是第几个串(当前串即根节点到当前节点):对于'B',只需向上跳一个 ...
- 【BZOJ】2434: [Noi2011]阿狸的打字机 AC自动机+树状数组+DFS序
[题意]阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P'两个字母. 经阿狸研究发现,这个打字机是这样工作的: l 输入小写 ...
- luogu SP8093 后缀自动机+树状数组+dfs序
这题解法很多,简单说几个: 1. 线段树合并,时间复杂度是 $O(nlog^2n)$ 的. 2. 暴力跳 $fail,$ 时间复杂度 $O(n\sqrt n),$ 比较暴力. 3. 建立后缀树后在 $ ...
- Codeforces 375D Tree and Queries(DFS序+莫队+树状数组)
题目链接 Tree and Queries 题目大意 给出一棵树和每个节点的颜色.每次询问$vj, kj$ 你需要回答在以$vj$为根的子树中满足条件的的颜色数目, 条件:具有该颜色的节点数量至少 ...
- HDU5293(SummerTrainingDay13-B Tree DP + 树状数组 + dfs序)
Tree chain problem Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
随机推荐
- 解决Webstom 2017中,输入法候选框无法显示问题
一.问题: 如题,IDE编辑界面内,输入法的候选框没法显示,有时需要打中文注释,非常麻烦. 原因:IDE自带的OpenJDK与输入法存在冲突 二.解决: (1)在编辑界面,双shift,搜索:swit ...
- SSE图像算法优化系列十二:多尺度的图像细节提升。
无意中浏览一篇文章,中间提到了基于多尺度的图像的细节提升算法,尝试了一下,还是有一定的效果的,结合最近一直研究的SSE优化,把算法的步骤和优化过程分享给大家. 论文的全名是DARK IMAGE ENH ...
- async await Task
一.使用Task 引用命名空间 using System.Threading.Tasks; 1.工厂方式 Task.Factory.StartNew(() => {Console.WriteLi ...
- web离线应用--dom storage
web离线应用--dom storage dom storage是html5添加的新功能,其实也不是什么新的应用,只不过是cookie的放大版本,由于cookie的大小只有4kb,而且在每次请求一个新 ...
- MySql绿色版应用
一.配置MySQL数据库 1.解压绿色版mysql,并改名为mysql5.7,如下图 对比一下下图5.6以前的版本,少data目录(存放数据)和my-default.ini文件(配置信息) 二.安装服 ...
- thinkphp实现文件的下载
首先需要看一下大家使用的Thinkphp的版本,不同的版本使用的方法不同,(在导入公共函数的时候方式不同) 我用的是thinkphp3.2.2版本的,因此直接使用import()函数,直接把使用thi ...
- 已有模板与tp框架结合
具体实现步骤: ①复制模板文件到view指定文件目录: ②复制css.js.img到view指定文件目录: ③把静态资源(css.js.img)文件的路径设置为“常量”信息(在index.php入口文 ...
- 转:JAVA里面的int类型 和Integer类型,有什么不一样
JAVA里面的int类型 和Integer类型,有什么不一样 原文链接:http://blog.csdn.net/wuxinliulei/article/details/11099565 java.l ...
- #openstack centos6 centos7 kvm镜像制作
#openstack centos6 centos7 kvm 镜像制作 openstack windows 2008镜像 制作 http://www.cnblogs.com/elvi/p/800129 ...
- kvm虚拟机管理 系统自动化安装
原创博文安装配置KVM http://www.cnblogs.com/elvi/p/7718574.htmlweb管理kvm http://www.cnblogs.com/elvi/p/7718582 ...