zoukankan      html  css  js  c++  java
  • 祖孙询问

    Description

    已知一棵n个节点的有根树。有m个询问。每个询问给出了一对节点的编号x和y,询问x与y的祖孙关系。

    Input
    输入第一行包括一个整数n表示节点个数。
    接下来n行每行一对整数对a和b表示a和b之间有连边。如果b是-1,那么a就是树的根。
    第n+2行是一个整数m表示询问个数。
    接下来m行,每行两个正整数x和y。

    Output
    对于每一个询问,输出1:如果x是y的祖先,输出2:如果y是x的祖先,否则输出0。

    Sample Input

    10
    234 -1
    12 234
    13 234
    14 234
    15 234
    16 234
    17 234
    18 234
    19 234
    233 19
    5
    234 233
    233 12
    233 13
    233 15
    233 19

    Sample Output
    1
    0
    0
    0
    2

    Data Constraint

    Hint
    对于100%的.据,n,m≤40000,每个节点的编号都不超过40000。
    .
    .
    .
    .
    .
    .

    分析

    DFS遍历树,记录每个点X的第一次访问时间st[a]和最后一次访问时间ed[a],若y在以X为根的子树中,则一定有st[a]

    程序:
    
        while i>0 do
        begin
            dfs(v[i],dep+1);
            i:=next[i];
        end;
        inc(p);
        en[node]:=p;
    end;
    
    begin
        readln(n);
        for i:=1 to n do
        begin
            readln(v[i],u[i]);
            if u[i]=-1 then root:=v[i] else
            begin
                next[i]:=list[u[i]];
                list[u[i]]:=i;
            end;
        end;
        dfs(root,1);
        readln(m);
        for i:=1 to m do
        begin
            readln(a,b);
            if (st[b]<st[a])and(st[a]<en[a])and(en[a]<en[b]) then writeln(2) else
            if (st[a]<st[b])and(st[b]<en[b])and(en[b]<en[a]) then writeln(1) else writeln(0);
        end;
    end.
  • 相关阅读:
    linux驱动模板
    Matlab的安装
    级数模型
    多元思维
    一级指针和二级指针
    Biology 053: Visualization of Digestive Enzymes
    Biology 052: Digestion Experiment
    Biology 06: Metabolism and Nutrition
    线性回归之电力预测
    python之产生随机数
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9499961.html
Copyright © 2011-2022 走看看