~~~~ program Project2;
const MaxN=100005; type TTree=array[1..MaxN] of Integer;
var N: Integer; // количество вершин Tree: TTree; //дерево x,y: Integer; //ребра дерева a,b,c: Integer; //начало, конец, узел проверки M: Integer; //количество тестов
function run(a,b,c: Integer): String; forward;
///инициализация procedure initial; begin N:=0; x:=0; y:=0; a:=0; b:=0; c:=0; M:=0; FillChar(Tree, SizeOf(Tree), 0); end;
///основная часть /// считывание /// обработка /// запись procedure readdata; var F: Text; i: Integer; G: Text; begin Assign(F, 'input.txt'); Reset(F); Assign(G, 'output.txt'); Rewrite(G); ReadLn(F,N); for i := 1 to N — 1 do begin ReadLn(F,x, y); if Tree[y]=0 then Tree[y]:=x else Tree[x]:=y; end; ReadLn(F, M); for i := 1 to M do begin ReadLn(F, a, b, c); WriteLn(G, run(a,b,c)); end; Close(G); Close(F); end;
function run(a,b,c: Integer): String; var i: Integer; begin run:='No'; for i := a to b do if (Tree[i]=c)Or(c=a)Or(c=b) then begin run:='Yes'; exit; end; end;
begin initial; readdata; end.
~~~~~
Проверка показала, что набрал из 10 балов 6. Я предполагаю не уложился по времени,тогда как нужно было изменить решение чтобы уложиться? Ведь если я буду использовать указатели, рекурсивный обход будет еще медленнее.