Doby's Lab

백준 11375번: 열혈강호 (C++) 본문

PS/BOJ

백준 11375번: 열혈강호 (C++)

도비(Doby) 2022. 3. 19. 19:15

https://www.acmicpc.net/problem/11375

 

11375번: 열혈강호

강호네 회사에는 직원이 N명이 있고, 해야할 일이 M개가 있다. 직원은 1번부터 N번까지 번호가 매겨져 있고, 일은 1번부터 M번까지 번호가 매겨져 있다. 각 직원은 한 개의 일만 할 수 있고, 각각

www.acmicpc.net


Solved By: Bipartite Matching

#include <iostream>
#include <vector>
#include <memory.h>
#define MAX 1001
using namespace std;

int n, m;
vector<int> adj[MAX];
bool visited[MAX];
int occupy[MAX];

bool dfs(int node){
    for(int i = 0; i < adj[node].size(); i++){
        int next = adj[node][i];
        
        if(visited[next]) continue;
        visited[next] = true;
        
        if(occupy[next] == 0 || dfs(occupy[next])){
            occupy[next] = node;
            return true;
        }
    }
    return false;
}

void init(){
    for(int i = 1; i <= n; i++){
        visited[i] = false;
    }
}

int main(){
    cin >> n >> m;
    
    int a;
    for(int i = 1; i <= n; i++){
        int v; cin >> v;
        for(int j = 0; j < v; j++){
            cin >> a;
            adj[i].push_back(a);
        }
    }
    
    int result = 0;
    for(int i = 1; i <= n; i++){
        init();
        if(dfs(i)) result++;
    }
    
    cout << result;
    return 0;
}