您的位置:首页 > 其它

hdu 5444 Elven Postman (DFS)

2015-09-14 17:42 381 查看
读懂题意就是个水题了。

给一棵树,左儿子权值大于其父亲,右儿子权值小于其父亲。

给出若干询问,输出从根节点到指定节点的路径。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;

struct Node{
    int l,r;
}p[1001];

void add(int u,int a)
{
    if(p[u].l==0&&a>u) {p[u].l=a;return;}
    if(p[u].r==0&&a<u) {p[u].r=a;return;}
    if(a>u) add(p[u].l,a);
    if(a<u) add(p[u].r,a);
}

void Find(int u,int x)
{
    if(u==x) return;
    if(x<u){
        printf("E");
        Find(p[u].r,x);
    }
    if(x>u){
        printf("W");
        Find(p[u].l,x);
    }
}

int main()
{
    int T,a,n,r;
    cin>>T;
    while(T--)
    {
        scanf("%d%d",&n,&r);
        p[r].l=p[r].r=0;
        for(int i=1;i<n;++i){
            scanf("%d",&a);
            add(r,a);
            p[a].l=p[a].r=0;
        }
        int q;
        scanf("%d",&q);
        while(q--)
        {
            scanf("%d",&a);
            Find(r,a);
            puts("");
        }
    }
    return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: