You have workers and jobs. Each worker can perform certain jobs based on their skills. Assign each worker to at most one job such that the number of assigned workers is maximum. This is bipartite matching: workers are group , jobs are group , and edges represent skills.
Run Kuhn's algorithm to get the maximum assignment. If you need all workers assigned, check whether the matching size equals .