C11BC2 - Robin

Tác giả: ladpro98

Ngôn ngữ: Pascal

program c11bc2;
uses    math;
const   maxn=22222;
        fi='';
var     inp:text;
        a,adj,link,head:array[1..maxn] of longint;
        check:array[1..maxn] of boolean;
        n,m,c,i,x,y,p,k:longint;

procedure dfs(i:longint);
var     j:longint;
begin
        check[i]:=true;
        a[i]:=c;
        j:=head[i];
        while j>0 do
        begin
                if not check[adj[j]] then
                dfs(adj[j]);
                j:=link[j];
        end;
end;

begin
        assign(inp,fi);reset(inp);
        readln(inp,n,k);
        for i:=2 to n do
        begin
                readln(inp,x,p);
                if p=1 then
                begin
                        inc(m);
                        adj[m]:=x;
                        link[m]:=head[i];
                        head[i]:=m;
                        inc(m);
                        adj[m]:=i;
                        link[m]:=head[x];
                        head[x]:=m;
                end;
        end;
        for i:=1 to n do
        if not check[i] then
        begin
                inc(c);
                dfs(i);
        end;

        for i:=1 to k do
        begin
                readln(inp,x,y);
                if a[x]=a[y] then writeln('NO')
                else writeln('YES');
        end;
end.

Download