时间限制:1 秒

内存限制:32 兆

特殊判题:否

提交:299

解决:29

题目描述:
大魏是JOBDU技术组里最喜欢折腾的一个了,单反、骑车、改九度页面,当然还有YY prado。我们姑且先把这些看做是会享受生活的表现;但是有一点我们就不能忍了,他连遍历树都有一些不一样的要求:
1.       对于给定的一棵树,他要求从根节点开始遍历完所有节点,相对于一般的节点遍历,他要求边的遍历,即每条边都要正好遍历过两次
2.       除了对于边遍历的变态要求,他还对叶子节点的遍历序列有着特殊的要求,即会预先指定所有叶子节点的遍历先后顺序。
这些要求是不是很BT? 实际上也还好了,仔细想想也能做出来的。
输入:
每个测试文件包含多个测试案例,每个测试案例包含三个部分:
第一行为一个整数K,代表这棵树总的节点个数, K>=1并且K<=300。
接下来是K – 1行,每行有两个整数,代表这棵树的K – 1条边。树节点的标号从1开始,且1代表根节点。
最后一行为包含所有的叶子节点编号的一个整数序列, 代表大魏所指定的叶子节点的遍历顺序。
输出:
对于每个测试案例,若满足大魏规定条件的遍历序列存在,则输出这个序列,每两个节点之间由空格隔开,末尾没有空格。
若不存在,则只需要输出一个-1。
样例输入:
3
1 2
2 3
3
6
1 2
1 3
2 4
4 5
4 6
5 3 6
样例输出:
1 2 3 2 1
-1

代码:

#include <stdio.h>
#include <string.h>
#define N 301
int n,head[N],li[N],ri[N];
int e,nx[N-1],to[N-1];
int vti[N],mk[N],ln;
int err,f1;
int Tsort(int rt)
{
int l=N,r=-1,ct=0,eg,peg,sn,es,pes;
if(head[rt]==0){
l=r=vti[rt];
ct=1;
}
else{
for(peg=0,eg=head[rt];eg;peg=eg,eg=nx[eg]){
sn=to[eg];
ct+=Tsort(sn);
if(err) return 0; for(pes=0,es=head[rt];li[to[es]]<li[sn];pes=es,es=nx[es]) ;
if(es!=eg){
nx[peg]=nx[eg];
nx[eg]=es;
if(pes!=0) nx[pes]=eg;
else head[rt]=eg;
eg=peg;
} if(li[sn]<l) l=li[sn];
if(ri[sn]>r) r=ri[sn];
}
}
if(r-l+1==ct){
li[rt]=l;
ri[rt]=r;
return ct;
}
else{
err=1;
return 0;
}
}
void printPT(int rt)
{
int eg;
if(f1) printf("%d",rt),f1=0;
else printf(" %d",rt);
if(head[rt]!=0){
for(eg=head[rt];eg;eg=nx[eg]){
printPT(to[eg]);
printf(" %d",rt);
}
}
}
int main()
{
int i,rt,sn,v;
while(scanf("%d",&n)!=EOF){
err=0; e=1; ln=n; f1=1;
memset(head,0,sizeof(head));
memset(mk,0,sizeof(mk));
mk[1]=1;
for(i=0;i<n-1;i++){
scanf("%d%d",&rt,&sn);
if(mk[sn]){v=sn;sn=rt;rt=v;}
to[e]=sn; nx[e]=head[rt]; head[rt]=e++;
if(mk[rt]==1) mk[rt]=2,ln--;
mk[sn]=1;
}
for(i=1;i<=ln;i++){
scanf("%d",&v);
vti[v]=i;
}
Tsort(1);
if(err) printf("-1");
else printPT(1);
printf("\n");
}
return 0;
} /**************************************************************
Problem: 1359
User: lovai
Language: C
Result: Accepted
Time:40 ms
Memory:916 kb
****************************************************************/

九度OJ 1359:大魏树遍历 (树)的更多相关文章

  1. 【九度OJ】题目1181:遍历链表 解题报告

    [九度OJ]题目1181:遍历链表 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1181 题目描述: 建立一个升序链表并遍历输出. ...

  2. 【九度OJ】题目1201-二叉排序树

    题目 建树过程是递归,"递归的思路不是很复杂",经过题目1078的训练,直接开始编码.提交及修改的过程告诉自己,这是一个错觉,对递归的理解还应该再进一步. 自己的实现 #inclu ...

  3. 【九度OJ】题目1078-二叉树遍历

    题目 这道题和后面的两道题,题目1201和题目1009,主要内容是对递归的实现,在逻辑上,递归是容易理解的,这种实现方式和我们思考的方式是相吻合的.但是在转换为计算机语言时,要明确告知计算机应该从哪里 ...

  4. 九度oj 题目1184:二叉树遍历

    题目描述: 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储). 例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空 ...

  5. 九度OJ 1172:哈夫曼树 (贪心)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6701 解决:2954 题目描述: 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结 ...

  6. 九度OJ 1090:路径打印 (树、DFS)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1704 解决:314 题目描述: 给你一串路径,譬如: a\b\c a\d\e b\cst d\ 你把这些路径中蕴含的目录结构给画出来,子目 ...

  7. 九度oj 题目1088:剩下的树

    题目描述: 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L ...

  8. 九度oj 题目1078:二叉树遍历

    题目1078:二叉树遍历 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5326 解决:3174 题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历 ...

  9. 九度oj题目&amp;吉大考研11年机试题全解

    九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码).    http://ac.jobdu.com/problem.php?pid=11 ...

随机推荐

  1. DriverStore文件夹特别大,能删除吗?

    DriverStore文件夹特别大,能删除吗? DriverStore\FileRepository文件夹特别大,能删除吗? C:\Windows\System32\DriverStore\FileR ...

  2. lodash 类型判断

    1.isArray _.isArray(value) 检查 value 是否是 Array 类对象. 2.isElement _.isElement(value) 检查 value 是否是可能是 DO ...

  3. Python 的数据表示

    一.常量.变量和对象 1.常量:是指在程序的执行过程中不变的量.如:1,2,3,4,……,true.false 也有一些包含在模块中的用符号表示的常量,常用的如math模块中的pi和e,如: > ...

  4. html 5 中的 6位 十六进制颜色码 代表的意思180313

    人的眼睛看到的颜色有两种: ⒈ 一种是发光体发出的颜色,比如计算机显示器屏幕显示的颜色: ⒉ 另一种是物体本身不发光,而是反射的光产生   的颜色,比如看报纸和杂志上的颜色. 我们又知道任何颜色都是由 ...

  5. redis实践一些要注意的事项

    不要放垃圾数据,及时清理无用数据实验性的数据和下线的业务数据及时删除; key尽量都设置过期时间对具有时效性的key设置过期时间,通过redis自身的过期key清理策略来降低过期key对于内存的占用, ...

  6. Java 扫描包下所有类(包括jar包)

    package com.MyUtils.file; [java] view plain copy import java.io.File; import java.io.FileFilter; imp ...

  7. ThreadLocal使用方法

      创建一个Bean,通过不同的线程对象设置Bean属性,保证各个线程Bean对象的独立性.   /**  * Created by IntelliJ IDEA.  * User: leizhimin ...

  8. linux用户密码生成

    linux账户保存在/etc/passwd,密码保存在/etc/shadow. 通过man 5 passwd,man 5 shadow可查看文件中各字段含义. encrypted password   ...

  9. jQuery 库 - 特性

    jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取 HTML 元素操作 CSS 操作 HTML 事件函数 JavaScript 特效和动画 HTM ...

  10. python 爬虫3 异常处理

    1.URLError 首先解释下URLError可能产生的原因: 网络无连接,即本机无法上网 连接不到特定的服务器 服务器不存在 在代码中,我们需要用try-except语句来包围并捕获相应的异常.下 ...