409457: GYM103566 E Стикеры

Memory Limit:0 MB Time Limit:0 S
Judge Style:Text Compare Creator:
Submit:0 Solved:0

Description

E. Стикерыограничение по времени на тест1.5 секундограничение по памяти на тест256 мегабайтвводстандартный вводвыводстандартный вывод

Организаторы олимпиады «Технологичные Когнитивы» обещали стикеры тем, кто позовет друзей участвовать в соревновании. Каждый участник при регистрации мог указать ФИО друга, который уговорил его принять участие в олимпиаде (а мог и не указать никого).

Если двое или более друзей, указавших вас как «пригласившего», зарегистрировались строго позже вас и решили хотя бы одну задачу, вы получаете заветные стикеры.

Пока жюри подводит итоги самой олимпиады, вопрос $$$\it{\text{«Ну что там по стикерам?»}}$$$ звучит из каждого утюга, поэтому помогите жюри и найдите список всех участников, получивших набор стикеров.

Входные данные

В первой строке вводится число $$$N$$$ $$$(1 \le N \le 3 \cdot 10^5)$$$  — число участников. Для удобства участники пронумерованы целыми числами от 1 до N.

Во второй строке записаны $$$N$$$ чисел $$$T_i$$$ $$$(1 \le T_i \le 10^9)$$$  — время регистрации $$$i$$$-го участника.

В третьей строке записаны $$$N$$$ чисел $$$P_i$$$ $$$(0 \le P_i \le 12)$$$  — количество задач, решенных участником $$$i$$$.

В четвертой строке записаны $$$N$$$ чисел $$$F_i$$$ $$$(0 \le F_i \le N)$$$  — номер друга, которого $$$i$$$-й участник отметил как «пригласившего». Если $$$F_i = 0$$$, то $$$i$$$-й участник никого не указал в таком статусе.

Выходные данные

В первой строке выведите одно целое число $$$K$$$ $$$(0 \le K \le N)$$$  — количество участников, которые должны получить стикеры.

Во второй строке через пробел выведите $$$K$$$ целых чисел $$$S_i$$$ $$$(1 \le S_1 \le S_2 \le \ldots \le S_K \le N)$$$  — номера получивших стикеров участников в возрастающем порядке.

Если $$$K = 0$$$, то на второй строке не надо выводить ничего.

ПримерыВходные данные
9
2 3 1 4 5 9 8 7 6
12 11 10 9 8 7 6 5 4
1 1 1 2 2 9 9 9 9
Выходные данные
2
2 9 
Входные данные
5
1 2 10 11 5
6 7 0 9 10
5 5 5 5 0
Выходные данные
0

Примечание

Рассмотрим детально первый тестовый пример.

  • Первый участник указал себя в качестве друга, соответственно он зарегистрировался НЕ позже себя  — не учитывается при распределении.
  • Второй участник указал первого как друга, а также зарегистрировался после участника $$$1$$$, значит, один приглашенный у первого есть.
  • Третий участник указал первого как друга, но зарегистрировался раньше, чем он, поэтому по правилам участник $$$3$$$ так же не учитывается при распределении.
  • Четвертый и пятый участники указали второго как друга и зарегистрировались после него. Засчитываем участнику $$$2$$$ двух приглашенных друзей.
  • Шестой, седьмой и восьмой участники указали девятого участника пригласившим и зарегистрировались после него. Участнику $$$9$$$ засчитали трех приглашенных друзей.
  • Сам девятый участник указал себя в качестве друга, соответственно он зарегистрировался НЕ позже себя  — не учитывается при распределении.

Итого, первому участнику «засчитали» одного друга, второму  — двух, девятому  — трёх. Все засчитанные участники решили хотя бы одну задачу, поэтому дают право участникам $$$2$$$ и $$$9$$$ получить стикеры.

Рассмотрим второй тестовый пример.

  • Первый и второй участники зарегистрировались до пятого, значит ему «в зачет» они не идут.
  • Третий участник зарегистрировался позже пятого, но не решил ни одной задачи, поэтому его голос учитываться не будет.
  • Лишь четвертый участник указал пятого, зарегистрировался позже него и решил хотя бы одну задачу. Поэтому только четвертый участник и будет засчитан пятому при распределинии стикеров.
  • Сам пятый участник не указал вообще никого в анкете  — вероятно он узнал об олимпиаде не от своего друга.
По итогу пятый участник не набрал необходимых двух приглашенных друзей, поэтому ответ на данный тестовый пример равен $$$0$$$.

加入题单

算法标签: