Копроцессор
Вам дана программа, состоящая из набора задач, организованных в виде ориентированного ациклического графа зависимостей. Каждая задача может зависеть от выполнения одной или нескольких других задач, и в графе отсутствуют циклические зависимости. Задача может быть выполнена только после завершения всех задач, от которых она зависит.
Некоторые задачи должны выполняться на сопроцессоре, другие — на главном процессоре. За один вызов сопроцессора вы можете передать ему список задач для выполнения. Для каждой задачи из этого списка все задачи, от которых она зависит, должны быть уже выполнены или находиться в этом же списке. Главный процессор начинает выполнение программы и автоматически получает результаты от сопроцессора.
Определите минимальное количество вызовов сопроцессора, необходимых для выполнения всей программы.
Входные данные
Первая строка содержит два числа N и M (1 ≤ N, M ≤ 2·10^5
) — количество задач и количество зависимостей между ними.
Вторая строка содержит N чисел E[i]
∈ {0,1}, разделённых пробелами. Если E[i]
= 0, то задача i должна выполняться на главном процессоре, иначе — на сопроцессоре.
Следующие M строк описывают зависимости между задачами. Каждая строка содержит два числа T[1]
и T[2]
, что означает, что задача T[1]
зависит от задачи T[2]
(T[1]
≠ T[2]
). Задачи пронумерованы от 0 до N-1. Все M пар уникальны.
Выходные данные
Выведите одно число — минимальное количество вызовов сопроцессора, необходимое для выполнения программы.