九度OJ 1359:大魏树遍历 (树)
时间限制: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:大魏树遍历 (树)的更多相关文章
- 【九度OJ】题目1181:遍历链表 解题报告
[九度OJ]题目1181:遍历链表 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1181 题目描述: 建立一个升序链表并遍历输出. ...
- 【九度OJ】题目1201-二叉排序树
题目 建树过程是递归,"递归的思路不是很复杂",经过题目1078的训练,直接开始编码.提交及修改的过程告诉自己,这是一个错觉,对递归的理解还应该再进一步. 自己的实现 #inclu ...
- 【九度OJ】题目1078-二叉树遍历
题目 这道题和后面的两道题,题目1201和题目1009,主要内容是对递归的实现,在逻辑上,递归是容易理解的,这种实现方式和我们思考的方式是相吻合的.但是在转换为计算机语言时,要明确告知计算机应该从哪里 ...
- 九度oj 题目1184:二叉树遍历
题目描述: 编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储). 例如如下的先序遍历字符串:ABC##DE#G##F###其中“#”表示的是空格,空格字符代表空 ...
- 九度OJ 1172:哈夫曼树 (贪心)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6701 解决:2954 题目描述: 哈夫曼树,第一行输入一个数n,表示叶结点的个数.需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结 ...
- 九度OJ 1090:路径打印 (树、DFS)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1704 解决:314 题目描述: 给你一串路径,譬如: a\b\c a\d\e b\cst d\ 你把这些路径中蕴含的目录结构给画出来,子目 ...
- 九度oj 题目1088:剩下的树
题目描述: 有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L ...
- 九度oj 题目1078:二叉树遍历
题目1078:二叉树遍历 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5326 解决:3174 题目描述: 二叉树的前序.中序.后序遍历的定义: 前序遍历:对任一子树,先访问跟,然后遍历 ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
随机推荐
- zh-cn en-uk表示语言(文化)代码与国家地区对照表
af 公用荷兰语 af-ZA 公用荷兰语 - 南非 sq 阿尔巴尼亚 sq-AL 阿尔巴尼亚 -阿尔巴尼亚 ar 阿拉伯语 ar-DZ 阿拉伯语 -阿尔及利亚 ar-BH 阿拉伯语 -巴林 ar-EG ...
- libevent2源码分析之三:信号的初始化流程
libevent2对信号的响应也进行了封装,使之与socket操作一样对外提供统一的接口.这里的信号一般指linux的信号.由于信号与socket相关的编程接口有较大的不同,因此在内部实现也有一些区别 ...
- 【Oracle】查找每期数据都存在的产品
现在存在以下数据 如上图:A01与A02同时存在201710.201711.201712中 我们现在要将其查找出来 如果上图的表结构如下: 那么查询的SQL如下: SELECT DISTINCT CO ...
- Oracle表空间不足处理
异常信息: 异常信息(异常类型:System.Data.OracleClient.OracleException) 异常提示:Oracle数据执行异常,请联系管理员处理 异常信息:ORA: 表 LC0 ...
- UITabBarController超强拓展
代码地址如下:http://www.demodashi.com/demo/11901.html 一.运行效果图 二.项目结构截图 三.主要API 我们主要关注的是TLTabBarController, ...
- mybatis+oracle的批量插入
// 批量插入,手动控制事务 SqlSession batchSqlSession = null; try { batchSqlSession = sqlSessionTemplate.getSqlS ...
- SAXReader解析xml文件demo
1. 加入jar包 2. 代码解析 package practice; import java.io.File; import java.util.List; import org.dom4j.Doc ...
- ADO.NET基础知识学习(SQLCOnnection&SQLCommand&SQLDataReader&SQLDataAdapter&DataSet)
通过ADO.NET技术,我们可以高效的完成客户端同数据库之间的数据访问操作,便于我们在客户端程序简便高效的访问以及获取数据库中的有用数据,同时也可以对数据库中的数据进行更新,即可以完成客户端与数据库之 ...
- unity, windows: Unhandled Exception: System.UnauthorizedAccessException: Access to the path "XXX\Temp\Assembly-CSharp.dll.mdb" is denied
的windows上使用unity,修改过脚本或inspector中的数值后运行编辑器报错: Unhandled Exception: System.UnauthorizedAccessExceptio ...
- Atitit OOCSS vs bem
Atitit OOCSS vs bem 1. 今天最流行的CSS开发框架技术当属OOCSS,尽管还有其他类似的技术存在,如BEM.1 2. CSS设计模式:OOCSS 和 SMACSS1 2 ...