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;
}