nicgames
03.01.2022 18:21

ПРОГРАММИРОВАНИЕ решить задачу на C++/Python

G. Браконьеры
ограничение по времени на тест: 1.5 секунд
ограничение по памяти на тест: 256 мегабайт
ввод: стандартный ввод
вывод: стандартный вывод
Алиса и Боб — два браконьера, которые рубят лес.

Лес это набор (возможно пустой) деревьев. Дерево — это связный граф без циклов. Подвешенное дерево имеет специальную вершину — корень. Родителем вершины v называется следующая вершина на кратчайшем пути от v до корня. Детьми вершины v называются вершины, для которых v является родителем. Вершина называется листом, если у неё нет детей.

В этой задаче мы определим глубину вершины как количество вершин на простом пути от этой вершины до корня. Рангом дерева назовем минимальную глубину его листа.

Изначально дан непустой лес подвешенных деревьев. Алиса и Боб играют в игру на этом лесе. Они ходят по очереди, Алиса ходит первой. В начале каждого хода игрок выбирает дерево из леса. Далее игрок выбирает положительное целое число — глубину разреза, которая не превосходит ранга выбранного дерева. Затем игрок удаляет из дерева все вершины, чьи глубины меньше либо равны глубине разреза. Все остальные вершины разбиваются на набор подвешенных деревьев, корнем каждого становится вершина, имевшая наименьшую глубину в дереве до разреза. Все эти деревья добавляются в лес и игра продолжается.

Игрок проигрывает, если на момент начала его хода лес пуст.

Определите, может ли Алиса победить, если оба игрока играют оптимально.

Входные данные
Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число t (1≤t≤5⋅105) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число n (1≤n≤5⋅105) — суммарное количество вершин в деревьях изначального леса.

Вторая строка содержит n целых чисел p1,p2,…,pn (0≤pi≤n) — описание леса. Если pi=0, то i-я вершина дерева является корнем, иначе pi является родителем вершины i. Гарантируется, что p задает корректный лес подвешенных деревьев.

Гарантируется, что сумма значений n по всем наборам входных данных не превосходит 5⋅105.

Выходные данные
Для каждого набора входных данных выведите «YES» (без кавычек), если Алиса может победить, иначе выведите «NO» (без кавычек). Вы можете выводить каждую букву в любом регистре.

Пример
входные данные
4
4
0 1 0 3
7
0 1 2 0 4 5 6
4
0 1 1 2
7
0 1 1 2 2 3 3
выходные данные
NO
YES
NO
YES

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
kirichmix
29.04.2021 23:01
ОК, всё это циклы.
1) Цикл for (цикл с счётчиком), при этом при каждом шаге цикла счётчик увеличивается на 1. Пример:
for a:=1 to 10 do //Цикл будет выполнен 10 раз
2) Цикл for (цикл с счётчиком), при этом при каждом шаге цикла счётчик уменьшается на 1. Пример:
for a:=10 to 1 do //Цикл будет выполнен 10 раз
3)Цикл с постусолвием. Если условие не выполняется, выполняется цикл. Его особенность заключается в том, что цикл выполнится хотя бы один раз вне зависимости от условия. Пример:
k:=0;
repeat
inc(k);
until k<9 //10 раз
4)Цикл с предусловием. Пока условие выполняется, выполняется и цикл.
Пример:
k:=0;
while k<>10 do
inc(k); //10 раз
0,0(0 оценок)
Ответ:
gorbunovayulia
07.10.2020 23:27
{Данная программа переводит любое сочетание символов ASCII в систему счисления заданную пользователем.}

//Pascal ABC.NET v3.0 сборка 1111

var
 a,i,b,r,n,j,bug:integer;
 s,se,slo,slof:string;

procedure preob(var a,b,n:integer; var se:string);
 begin
  repeat
   b:=a mod n;
   a:=a div n;
   str(b,se);
   s+=se;
  until (a<=n-1);
 end;

beginreadln(slo);
readln(n);
for j:=1 to length(slo) do
begin;
a:=ord(slo[j]);
preob(a,b,n,se);
str(a,se);
s+=se;
for i:=1 to length(s) div 2 do
begin;
se:=s[i];
s[i]:=s[length(s)-i+1];
s[length(s)-i+1]:=se[1];
end;
write(s,'-');
slof:=slof+s;
delete(s,1,length(s));
end;
end.

Пример ввода:
Домашняя работа на завтра.
2
Пример вывода:
11000100-11101110-11101100-11100000-11111000-11101101-11111111-11111111-100000-11110000-11100000-11100001-11101110-11110010-11100000-100000-11101101-11100000-100000-11100111-11100000-11100010-11110010-11110000-11100000-101110-

{Таким образом, фразу "Домашняя работа на завтра." можно закодировать как "11000100-11101110-11101100-11100000-11111000-11101101-11111111-11111111-100000-11110000-11100000-11100001-11101110-11110010-11100000-100000-11101101-11100000-100000-11100111-11100000-11100010-11110010-11110000-11100000-101110-".}
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота