EduBrick

I. Минимальное контролирующее множество

2000 мс · 64 МБ · всё или ничего

В двудольном графе нужно построить минимальное вершинное покрытие — наименьший набор вершин, такой что у каждого ребра хотя бы один конец в наборе. Максимальное паросочетание уже дано.

Формат ввода

В первой строке nn и mm (1≤n,m≤40001 \le n, m \le 4000) — размеры долей. В следующих nn строках описаны рёбра: сначала KiK_i (0≤Ki≤m0 \le K_i \le m) — количество соседей ii-й вершины первой доли, затем сами номера в произвольном порядке. Сумма всех KiK_i не превосходит 5⋅1055 \cdot 10^5.

В последней строке nn чисел LiL_i (0≤Li≤m0 \le L_i \le m) — некоторое максимальное паросочетание: пара ii-й вершины первой доли или 00, если она не покрыта.

Формат вывода

В первой строке выведите размер минимального вершинного покрытия. Во второй строке — количество вершин первой доли в нём, затем их номера в возрастающем порядке. В третьей строке — то же самое для второй доли.

Примеры

ввод
3 2
2 1 2
1 2
1 2
1 2 0
вывод
2
1 1
1 2
ввод
1 1
0
0
вывод
0
0
0
Разбор идеи от автора задачи. Сначала попробуйте сами.
Войдите, чтобы отправлять решения.