Я думаю, что следующий алгоритм полиномиального времени, основанный на максимальном потоке. Пусть будет входом.G(V,E),b,c
- Построить направленный двудольный граф с и , являющийся левой и правой перегородки и будучи направленным ребра из до .H(L,R,F)LRF LR
- Пусть . Есть вершин и вершин .|V|=nnLnR
- Каждая вершина имеет «копию» в (скажем, ) и копию в (скажем, ).v∈VLvlRvr
- Если добавить направленное ребро из в . Каждый такой край имеет емкость 1.(u,v)∈Eulvr
- Добавить «источник» узел и добавить направленные ребра из каждой вершиной в . Каждое такое ребро имеет емкость .ssLb
- Добавьте «тонущий» узел и добавьте направленные ребра из каждой вершины в к . Каждый такой край имеет емкость .tRtc
- Найти максимальный поток от до .st
Данный граф имеет решение тогда и только тогда, когда рассчитанный выше максимальный поток насыщает каждое ребро от до , т.е. поток на каждом ребре от до равен .GsLsLb