hdu5444 Elven Postman 二叉树建树

来源:互联网 发布:网络大电影众筹平台 编辑:程序博客网 时间:2024/06/15 18:34
    //给一颗二叉树 , 这颗树是从左到右编号的 , 问    //给出一个树的序列,问从根节点到每一个节点的    //路线 , 向左走是'E' , 向右走是'W'    #include<cstdio>    #include<cstring>    #include<iostream>    using namespace std ;    const int maxn = 1010 ;    char ans[maxn][maxn] ;    char a[maxn] ;    int len[maxn] ;    int edge[maxn][2] ;    void dfs(int u , int pre , int num , int step)    {        if(!pre)          a[step] = 'E' ;        else          a[step] = 'W' ;        if(!edge[u][pre])        {            edge[u][pre] = num ;            memcpy(ans[num] , a , sizeof(a)) ;            len[num] = step ;            return  ;        }        if(edge[u][pre] > num)            dfs(edge[u][pre] , 0 , num , step+1) ;        else            dfs(edge[u][pre] , 1 , num , step+1) ;    }    int main()    {       // freopen("in.txt" , "r" , stdin) ;        int t ;        scanf("%d" , &t) ;        while(t--)        {            int n;            scanf("%d" , &n) ;            memset(edge , 0 , sizeof(edge)) ;            int tmp ;            int root ;            scanf("%d" , &root);            len[root] = -1 ;            for(int i = 2;i <= n;i++)            {                scanf("%d" , &tmp) ;                dfs(root , tmp > root , tmp , 0) ;            }            int q ;            scanf("%d" , &q) ;            while(q--)            {                scanf("%d" , &tmp) ;                for(int i = 0 ;i <= len[tmp];i++)                printf("%c" , ans[tmp][i]) ;                puts("") ;            }        }    }
0 0
原创粉丝点击