Ну вот скажите, я разве говорил, что оно должно работать?
Эх...
Вы сказали, что задача паросочетания (bipartite matching) не подходит. Я спросил, почему вы так решили, ведь ваша задача - один в один bipartite matching.
Как выяснилось, вы неправильно её решали. Bipartite matching не решается жадным алгоритмом.