Разбор задачи E#652 (Div2)
olegfomenkoУсловие задачи: https://codeforces.com/contest/1369/problem/E
Рассмотрим двудольный граф. Слева расположим вершины друзей, справа – блюда.
За каждым блюдом закрепим его «рейтинг» rate[i]= w[i] – cnt[i], где cnt[i] – кол-во друзей которые хотят это блюдо.
Для первого примера это будет выглядеть так:
Будем действовать жадным способом. Берем вершину с наибольшим рейтингом. Если он отрицательный то ответ DEAD. Иначе добавляем в список ответа всех друзей, смежных с данным блюдом.
У выбранных друзей удаляем ребра к другим блюдам и увеличиваем их рейтинг соответственно. После обхода всех друзей вызываем рекурсивно этот процесс от их вторых блюд (если они еще не использованы и их рейтинг >= 0)
После завершения всех обходов разворачиваем список и выводим ответ.