Elven Postman(BST )

Elven Postman

Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 147    Accepted Submission(s): 90

Problem Description

Elves
are very peculiar creatures. As we all know, they can live for a very
long time and their magical prowess are not something to be taken
lightly. Also, they live on trees. However, there is something about
them you may not know. Although delivering stuffs through magical
teleportation is extremely convenient (much like emails). They still
sometimes prefer other more “traditional” methods.

So, as a
elven postman, it is crucial to understand how to deliver the mail to
the correct room of the tree. The elven tree always branches into no
more than two paths upon intersection, either in the east direction or
the west. It coincidentally looks awfully like a binary tree we human
computer scientist know. Not only that, when numbering the rooms, they
always number the room number from the east-most position to the west.
For rooms in the east are usually more preferable and more expensive due
to they having the privilege to see the sunrise, which matters a lot in
elven culture.

Anyways, the elves usually wrote down all the
rooms in a sequence at the root of the tree so that the postman may know
how to deliver the mail. The sequence is written as follows, it will go
straight to visit the east-most room and write down every room it
encountered along the way. After the first room is reached, it will then
go to the next unvisited east-most room, writing down every unvisited
room on the way as well until all rooms are visited.

Your task is to determine how to reach a certain room given the sequence written on the root.

For instance, the sequence 2, 1, 4, 3 would be written on the root of the following tree.

Input

First you are given an integer T(T≤10) indicating the number of test cases.

For each test case, there is a number n(n≤1000) on a line representing the number of rooms in this tree. n integers representing the sequence written at the root follow, respectively a1,...,an where a1,...,an∈{1,...,n}.

On the next line, there is a number q representing the number of mails to be sent. After that, there will be q integers x1,...,xq indicating the destination room number of each mail.

Output

For each query, output a sequence of move (E or W) the postman needs to make to deliver the mail. For that E means that the postman should move up the eastern branch and W the western one. If the destination is on the root, just output a blank line would suffice.

Note that for simplicity, we assume the postman always starts from the root regardless of the room he had just visited.

Sample Input

2
4
2 1 4 3
3
1 2 3
6
6 5 4 3 2 1
1
1

Sample Output

E

WE
EEEEE

模拟了BST的插入。(不加旋转操作方便点)

#include<bits/stdc++.h>
#define F first
#define S second
using namespace std;
const int M = 1e3 + 10 ;
pair<int,int> g[M] ;
int n , x ;

void BST (int u) {
        if (x < u) {
                if (g[u].F == -1) {
                        g[u].F = x ;
                        return ;
                }
                BST (g[u].F) ;
        }
        else {
                if (g[u].S == -1) {
                        g[u].S = x ;
                        return ;
                }
                BST (g[u].S) ;
        }
}

void dfs (int u) {
        if (x == u) {
                puts ("") ;
                return ;
        }
        if (x < u) {
                printf ("E") ;
                dfs (g[u].F) ;
        }
        else {
                printf ("W") ;
                dfs (g[u].S) ;
        }
}

int main () {
        int T ;
        scanf ("%d" , &T ) ;
        while (T --) {
                scanf ("%d" , &n) ;
                int root ;
                scanf ("%d" , &root) ;
                for (int i = 1 ; i <= n ; i ++) g[i] = {-1,-1} ;
                for (int i = 2 ; i <= n ; i ++) {
                        scanf ("%d" , &x) ;
                        BST (root) ;
                }
                int q ;
                scanf ("%d" , &q) ;
                while (q --) {
                        scanf("%d" , &x) ;
                        dfs (root) ;
                }
        }
        return 0 ;
}
时间: 2024-08-26 04:51:23

Elven Postman(BST )的相关文章

Elven Postman(二叉树)

Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1091    Accepted Submission(s): 617 Problem Description Elves are very peculiar creatures. As we all know, they can live for a ver

HDU 5444 Elven Postman(二叉查找树)

Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 558    Accepted Submission(s): 308 Problem Description Elves are very peculiar creatures. As we all know, they can live for a ver

【数据结构】什么是二叉查找树(BST)

什么是二叉查找树(BST) 1. 什么是BST 对于二叉树中的每个节点X,它的左子树中所有项的值都小于X中的项,它的右子树中所有项的值大于X中的项.这样的二叉树是二叉查找树. 以上是一颗二叉查找树,其特点是: (1)若它的左子树不为空,则左子树上的所有节点的值都小于它的根节点的值: (2)若它的右子树不为空,则右子树上所有节点的值都大于它的根节点的值: (3)其他的左右子树也分别为二叉查找树: (4)二叉查找树是动态查找表,在查找的过程中可见添加和删除相应的元素,在这些操作中需要保持二叉查找树的

hdu 5444 Elven Postman(长春网路赛——平衡二叉树遍历)

题目链接:pid=5444http://">http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1206    Accepted Submission(s): 681 Problem Description E

图解:二叉搜索树算法(BST)

摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢!"岁月极美,在于它必然的流逝""春花 秋月 夏日 冬雪"- 三毛 一.树 & 二叉树 树是由节点和边构成,储存元素的集合.节点分根节点.父节点和子节点的概念.如图:树深=4; 5是根节点:同样8与3的关系是父子节点关系. 二叉树binary tree,则加了"二叉"(binary),意思是在树中作区分.每个节点至多有两个子(child),

C语言实现二叉查找树(BST)的基本操作

我们在上一篇博客中讲解了二叉树,这一次我们来实现二叉树的进阶--二叉查找树(Binary Search Tree),又称二插排序树(Binary Sort Tree).所以简称为BST.二插查找树的定义如下: 1.若左子树不为空,则左子树上所有节点的值均小于它的根节点的值: 2.若右子树不为空,则右子树上所有节点的值均大于它的根节点的值: 3.左右子树也分别为二叉排序树: 二叉排序树的一个重要特点就是中序遍历是一个递增序列.示例代码上传至: https://github.com/chenyufe

hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online

很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死…… 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了……没了! 反复读题,终于在偶然间注意到了这一句——"Not only that, when numbering the rooms, they always number the room number from the east-most position to the west." 它告诉我们,东边的点总是比西边的点

HDU 5444 Elven Postman (2015 ACM/ICPC Asia Regional Changchun Online)

[题目链接]:click here~~ [题目大意]: HDU 5444 题意:在最初为空的二叉树中不断的插入n个数.对于每个数,从根节点开始判断,如果当前节点为空,就插入当前节点,如果当前节点不为空,则小于当前节点的值,插入右子树,否则插入左子树. 接着q次询问,每次询问一个值在二叉树中从根节点开始的查找路径. 3 直接用二叉树模拟整个插入和询问的过程 代码: /* * Problem: HDU No.5444 * Running time: 0MS * Complier: G++ * Aut

HDU 5444 Elven Postman (二叉树,暴力搜索)

题意:给出一颗二叉树的先序遍历,默认的中序遍历是1..2.……n.给出q个询问,询问从根节点出发到某个点的路径. 析:本来以为是要建树的,一想,原来不用,其实它给的数是按顺序给的,只要搜结点就行,从根开始搜,如果要到的结点比根结点大,那么一定是向W走, 然后去第一个结点,然后接着判定,一直走,如果找到结束就好.水题.当时想的有点复杂. 代码如下: #include <cstdio> #include <string> #include <cstdlib> #includ