POJ 1466 - Girls and Boys(二分图匹配)

来源:互联网 发布:淘宝企业店铺名字大全 编辑:程序博客网 时间:2024/05/29 02:37

题目:

http://poj.org/problem?id=1466

题意:

n个男生,n个女生,之间存在一些关系。问两两不存在关系的学生最多有多少个。

思路:

二分图,最大独立点集 = n - 最大匹配数。

AC.

#include <iostream>#include <cstdio>#include <cstring>using namespace std;int n, vN, uN;int g[505][505];int linker[505];bool used[505];bool dfs(int u){    for(int v = 0; v < vN; ++v)    {        if(g[u][v] && !used[v]) {            used[v] = true;            if(linker[v] == -1 || dfs(linker[v])) {                linker[v] = u;                return true;            }        }    }    return false;}int hungary(){    int res = 0;    memset(linker, -1, sizeof(linker));    for(int u = 0; u < uN; ++u) {        memset(used, 0, sizeof(used));        if(dfs(u)) res++;    }    return res;}int main(){    //freopen("in", "r", stdin);    while(~scanf("%d", &n)) {        memset(g, 0, sizeof(g));        for(int i = 0; i < n; ++i) {            int a, t, b;            scanf("%d: (%d)", &a, &t);            for(int j = 0; j < t; ++j) {                scanf("%d", &b);                g[a][b] = 1;            }        }        uN = n;        vN = n;        int ans = hungary();        printf("%d\n", (n*2 - ans)/2);    }    return 0;}


0 0
原创粉丝点击