Разбор задачи E#652 (Div2)

Разбор задачи E#652 (Div2)

olegfomenko

Условие задачи: https://codeforces.com/contest/1369/problem/E
Рассмотрим двудольный граф. Слева расположим вершины друзей, справа – блюда.

За каждым блюдом закрепим его «рейтинг» rate[i]= w[i] – cnt[i], где cnt[i] – кол-во друзей которые хотят это блюдо.

Для первого примера это будет выглядеть так:

Первый пример из условия

Будем действовать жадным способом. Берем вершину с наибольшим рейтингом. Если он отрицательный то ответ DEAD. Иначе добавляем в список ответа всех друзей, смежных с данным блюдом. 

Выбор блюда и смеждых с ним друзей


У выбранных друзей удаляем ребра к другим блюдам и увеличиваем их рейтинг соответственно. После обхода всех друзей вызываем рекурсивно этот процесс от их вторых блюд (если они еще не использованы и их рейтинг >= 0)


После завершения всех обходов разворачиваем список и выводим ответ.

Замена рейтингов и удаление ребер к другим блюдам


Report Page