Codeforces Round 715 (Div. 1) |
---|
Закончено |
Yuu Koito и Touko Nanami — молодожёны! В день свадьбы Yuu подарила Touko ориентированное дерево с $$$n$$$ вершинами и корнем в $$$1$$$, а также маркировку $$$a$$$, которая является некоторым DFS обходом дерева. Каждое ребро в этом дереве направлено в сторону от корня.
Следующий алгоритм после вызова dfs(1) возвращает $$$a$$$ — DFS-обход дерева, корнем которого является $$$1$$$:
номер := 0
a := массив длины n
функция dfs(u):
номер := номер + 1
a[u] := номер
для всех v, для которых есть ориентированное ребро (u -> v):
dfs(v)
Обратите внимание, что для дерева может существовать несколько различных DFS-обходов
Touko настолько понравился подарок, что она решила поиграть с ним! Каждый день, начиная с дня после свадьбы, Touko выполняет следующую процедуру один раз:
Прошли дни со свадьбы, а Touko как-то забыла, когда была свадьба, и какой была оригинальная маркировка $$$a$$$! Опасаясь, что Yuu может разозлиться, Touko решила попросить вас определить эту информацию, используя текущую маркировку.
Будучи ее хорошим другом, вы должны найти количество дней, прошедших со свадьбы, и оригинальную маркировку дерева. Однако есть шанс, что Touko могла ошибиться в процессе, в результате чего текущую маркировку невозможно получить ни из какой начальной маркировки, в этом случае, пожалуйста, сообщите об этом Touko.
В первой строке входных данных содержится целое число $$$n$$$ ($$$2 \le n \le 3 \cdot 10^5$$$) — количество вершин в дереве.
Во второй строке содержатся $$$n$$$ целые числа $$$a_1$$$, $$$a_2$$$, ..., $$$a_n$$$ ($$$1 \le a_i \le n$$$, все $$$a_i$$$ различны) — текущая маркировка дерева.
Каждая из следующих $$$n - 1$$$ строк содержит два целых числа $$$u_i$$$ и $$$v_i$$$ ($$$1 \le u, v \le n$$$, $$$u \neq v$$$), описывающие ориентированное ребро от $$$u_i$$$ до $$$v_i$$$. Ребра образуют корневое ориентированное дерево с корнем в $$$1$$$.
Если текущую маркировку невозможно получить ни из какого DFS-обхода, выведите NO.
В противном случае в первой строке выведите YES. Во второй строке выведите единственное целое число, обозначающее количество дней со дня свадьбы. В третьей строке выведите $$$n$$$ чисел через пробел, обозначающих оригинальную маркировку дерева.
Если есть несколько правильных решений, вы можете вывести любое. Это означает, что вы можете вывести любую пару (DFS-обход, количество дней), для которой мы получим текущую конфигурацию, начав из DFS-обхода, который вы предоставили, ровно через предоставленное вами количество дней.
7 4 5 2 1 7 6 3 1 5 7 6 1 2 2 7 3 4 1 3
YES 5 1 4 2 3 7 6 5
7 7 6 5 3 1 4 2 4 3 2 5 3 7 1 4 7 2 2 6
NO
Следующая анимация демонстрирует первый пример. Белая метка внутри вершины обозначает номер вершины $$$i$$$, а оранжевая метка — значение $$$a_i$$$.
Название |
---|