hdu 1068 Girls and Boys(二分图匹配)

来源:互联网 发布:metismenu.js 编辑:程序博客网 时间:2024/06/09 15:41

http://blog.acmj1991.com/?p=783

题意:找到最大男女配对方法

思路:二分图匹配,n-sum/2

#include<stdio.h>#include<string.h>#define maxN 1010int num,head[maxN],pre[maxN],vist[maxN];struct node{    int v,next;}po[10*maxN];void add(int u,int v){    po[num].v=v;    po[num].next=head[u],head[u]=num++;}int mat(int u){    for(int i=head[u];i!=-1;i=po[i].next)    {        int v=po[i].v;        if(!vist[v]){            vist[v]=1;            if(pre[v]==-1||mat(pre[v]))            {                pre[v]=u;                return true;            }        }    }    return false;}int main(){    int n;    while(~scanf("%d",&n))    {        num=0;        memset(head,-1,sizeof(head));        memset(pre,-1,sizeof(pre));        for(int i=0;i<n;i++){            int u,v,m;            scanf("%d",&u);            scanf("%*[^(](%d%*[^0-9]",&m);            while(m--){                scanf("%d",&v);                add(u,v);            }        }            int sum=0;        for(int i=0;i<n;i++)        {            memset(vist,0,sizeof(vist));            if(mat(i))sum++;        }        printf("%d\n",n-sum/2);    }}


原创粉丝点击