POJ1469——COURSES(二分图最大匹配模板)

来源:互联网 发布:黄金k线图软件 编辑:程序博客网 时间:2024/05/29 16:21

题目

#include <algorithm>#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <cstdlib>#include <vector>#include <queue>#include <map>#define INF 0x7fffffffusing namespace std;const int MOD = 1e9 + 7;const int N = 100 + 10;const int M = 300 + 10;int n,m;int vis[M], match[M];int G[N][M];bool dfs(int u) {    for(int v = 0; v < m; v++) {        if(vis[v] || !G[u][v]) continue;        vis[v] = true;        if(match[v] == -1 || dfs(match[v])) {            match[v] = u;            return true;        }    }    return false;}int maxmatch() {    int cnt = 0;    memset(match, -1, sizeof(match));    for(int i = 0; i < n; i++) {        memset(vis, false, sizeof(vis));        if(dfs(i)) cnt++;    }    return cnt;}int main() {    int T;    scanf("%d", &T);    while(T--) {        memset(G, 0, sizeof(G));        scanf("%d%d", &n, &m);        for(int i = 0; i < n; i++) {            int cnt, s;            scanf("%d", &cnt);            while(cnt--) {                scanf("%d", &s);                s--;                G[i][s] = 1;            }        }        int ans = maxmatch();        if(ans == n) puts("YES");        else puts("NO");    }    return 0;}


0 0
原创粉丝点击