Multiple Assignment Problem
Difference between en1 and en2, changed 102 character(s)
Hello Codeforces community,↵


I have come across this problem and I would like some help.↵


You are given N machines and M jobs.↵
Each machine has a processing power P_i (integer).↵
Each job requests a processing power P_j (integer).↵
A job j is complete when it has a total of P_j power coming from 
**1 or more machines.**
A machine can provide some part of it's power to 
**one or more jobs.**↵

The bold parts above are what makes it different than the standard assignment problem.


It's guaranteed that sum of machine power = sum of job request power. Which means all jobs can be completed.↵

I want to minimize the number of assignments (machine, job).↵


Example:↵

Machine A (50)             ↵
Machine B (30)             ↵
Machine C (40)             ↵

Job A (70)             ↵
Job B (50)↵


Minimum assignments: 3             ↵
(machine A sends 50 to job B)             ↵
(machine B sends 30 to job A)             ↵
(machine C sends 40 to job A)↵



**Is there any algorithm that solves this? (excluding brute force)**↵

It sounds like the Generalized assignment problem, but with less restrictions. https://en.wikipedia.org/wiki/Generalized_assignment_problem↵

This is a bipartide graph, with integer flows and balanced.↵

The closest solution I got is (aside from brute force) to try a mincost-maxflow algorithm setting the imbalances and enforcing a fixed cost (say 1) to use one edge (independent of the amount of flow). However I am not sure if that works, because there is also the dual problem using potential and reduced costs. I don't know how to handle that on this problem.↵

Thanks!↵

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en2 English edufgf 2016-12-10 05:00:10 102 Tiny change: ' jobs.**\nThe bold' -> ' jobs.**\n\nThe bold'
en1 English edufgf 2016-12-10 04:45:22 1553 Initial revision (published)