hdu1068Girls and Boys(求二分图的最大独立集)

来源:互联网 发布:手机淘宝切换账号登录 编辑:程序博客网 时间:2024/05/16 01:40

这道题是让求最大独立集,最大独立集=节点数-最大匹配数;建好图后套用模板就行了;

#include<stdio.h>#include<stdlib.h>#include<string.h>#define N 1100int n;int used[N],mat[N][N],link[N];int dfs(int t){    int i;    for(i=0; i<n; i++)    {        if(used[i]==0&&mat[t][i])        {            used[i]=1;            if(link[i]==-1||dfs(link[i]))            {                link[i]=t;                return 1;            }        }    }    return 0;}int main(){    int i,k,a;    while(scanf("%d",&n)!=EOF)    {        memset(link,-1,sizeof(link));        memset(mat,0,sizeof(mat));        int t=n;        while(t--)        {            scanf("%d: (%d)",&i,&k);            while(k--)            {                scanf("%d",&a);                mat[i][a]=1;            }        }        int num=0;        for(i=0; i<n; i++)        {            memset(used,0,sizeof(used));            if(dfs(i))                num++;        }        printf("%d\n",n-num/2);//注意num要除以2,因为是在同一个集合中匹配的    }    return 0;}


0 0