Контест Senior ARC и циклы ссылок обновлено

Задача на Swift: какие объекты утекут из-за циклов ссылок

Условие

Смоделируйте ARC. Есть n объектов (номера с 1), r корней (на каждый корень есть одна внешняя сильная ссылка) и m ссылок между объектами: a b strong или a b weak. Ссылки могут повторяться и указывать на себя.

ARC освобождает объект, когда число сильных ссылок на него (из корней и от ещё не освобождённых объектов) становится нулём, при освобождении пропадают и его исходящие ссылки. Утёкшие объекты: не освобождены и недостижимы из корней по сильным ссылкам.

Ввод: n m r (1 ≤ n ≤ 10⁴, 0 ≤ m ≤ 10⁴), строка с r номерами корней (может быть пустой), затем m строк со ссылками.

Выведите номера утёкших объектов по возрастанию через пробел или none.

Пример

5 5 1
1
1 2 strong
2 3 strong
3 2 weak
4 5 strong
5 4 strong
4 5

Цикл 2 ↔ 3 разорван слабой ссылкой, а 4 ↔ 5 держат друг друга.

Как подойти

Каскад нулевых счётчиков + обход из корней.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.