백준
백준 소스코드 [C++] 11376 열혈강호 2
Hani_Levenshtein
2021. 1. 16. 04:15
11376번: 열혈강호 2
강호네 회사에는 직원이 N명이 있고, 해야할 일이 M개가 있다. 직원은 1번부터 N번까지 번호가 매겨져 있고, 일은 1번부터 M번까지 번호가 매겨져 있다. 각 직원은 최대 두 개의 일을 할 수 있고,
www.acmicpc.net
백준 소스코드 [C++] 11376 열혈강호 2
#include <iostream>
#include <algorithm>
#include <queue>
#include <string.h>
#include <limits.h>
#include <vector>
#include <math.h>
#include <stack>
#include <bitset>
#include <string>
#include <set>
#define all(v) v.begin(), v.end()
#define pii pair<int,int>
#define make_unique(v) v.erase(unique(v.begin(), v.end()), v.end())
typedef long long ll;
using namespace std;
int n, m, u, v, num, cnt = 0;
vector<int> path[1001];
vector<bool> chk;
vector<int>parent;
bool dfs(int left) {
if (chk[left]) return false;
chk[left] = true;
for (auto &right:path[left]) {
if (parent[right] == 0 || dfs(parent[right])) {
parent[right] = left;
return true;
}
}
return false;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> m;
chk.resize(n + 1,false);
parent.resize(m + 1,0);
for (int i = 1;i <= n;i++) {
cin >> num;
for (int j = 0;j < num;j++) {
cin >> u;
path[i].push_back(u);
}
}
for (int i = 1;i <= n;i++)
for (int j = 1;j <= 2;j++)
{
chk = vector<bool>(n + 1, false);
if (dfs(i)) cnt++;
}
cout << cnt;
return 0;
}