时间限制: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. tcp/ip--百度百科

    Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议,是Internet最基本的协议.Inter ...

  2. 【Java】Java_13 分支结构

    Java中常见的两种分支结构: <1>If语句:使用布尔表达式或者布尔类型值作为分支条件来进行分支控制. <2>switch语句:对多个整形值进行匹配,从而实现分支控制. 1. ...

  3. Linux下中断程序导致写文件失败的分析

    案例: 一个普通linux C程序,执行期间会进行多次printf操作,利用bash脚本重定向功能,将stdout重定向到一个另一个文件中去.在运行途中用ctrl+C终止程序,发现定向文件始终为空,即 ...

  4. java 学习帮助

    java学习这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是我你是如何学习Java的,能不能给点建议?今 天我是打算来点干货,因此咱们就不说一些学习方法和技巧了,直接来 ...

  5. 锁定窗口,禁止更新的win32函数

    [DllImport("user32.dll", EntryPoint = "LockWindowUpdate", SetLastError = true, E ...

  6. redis清空部分key

    redis-cli keys "test:job:*" redis-cli keys "test:job:*" |xargs redis-cli del

  7. .NET Core环境安装

    .Net Core可从https://www.microsoft.com/net/download下载 如果你使用自己喜欢的命令行工具或使用Visual Studio Code,你需要下载.NET C ...

  8. awk overview

    VARIABLES, RECORDS AND FIELDS AWK  variables are dynamic; they come into existence when they are fir ...

  9. ubuntu 下查看某个包是否 安装

    dpkg -l   dpkg -l|grep package-name   dpkg --status package-name   查看/var/lib/dpkg/status 内容

  10. C#虚方法、抽象类、方法重写

    Timer.每隔一段时间触发一个事件.不可视控件.Interval.Enabled.Tick事件.计量单位:ms(毫秒). 1秒=1000毫秒.取当前时间      DateTime.Now.ToSt ...