#include<stdio.h> #include<algorithm> #include<vector> using namespace std; vector<int> adj[201]; int rev[201], n, m; bool ck[201]; bool dfs(int h) { if (ck[h]) return false; ck[h] = true; for (auto t : adj[h]) { if (!rev[t] || dfs(rev[t])) { rev[t] = h; return true; } } return false; } int main() { scanf("%d %d", &n, &m); for (int i = 1; i <= n; i++) { int a, b; scanf("%d", &a); for (int j = 0; j < a; j++) { scanf("%d", &b); adj[i].push_back(b); } } int res = 0; for (int i = 1; i <= n; i++) { fill(ck + 1, ck + 1 + n, false); if (dfs(i)) res++; } printf("%d", res); return 0; }
2188번: 축사 배정
https://www.acmicpc.net/problem/2188
피드 구독하기:
댓글
(
Atom
)
댓글 없음 :
댓글 쓰기