페이지

2188번: 축사 배정

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


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

댓글 없음 :

댓글 쓰기