hdu1083——二分匹配

来源:互联网 发布:企业网络推广 编辑:程序博客网 时间:2024/05/18 23:28

#include<stdio.h>
#include<string.h>
#define max 303
int
g[max][max];
int
n,p;
int
v[max],my[max];
bool
find(int k)
{

    int
j;
    for
(j=1;j<=n;j++)
        if
(g[k][j]==1&&v[j]==0)
        {

            v[j]=1;
            if
(my[j]==-1||find(my[j]))
            {

                my[j]=k;
                return
true;
            }
        }

        return
false;
}

int
hun()
{

    int
i,ans=0;
    memset(my,-1,sizeof(my));
    for
(i=1;i<=n;i++)
    {

        memset(v,0,sizeof(v));
        if
(find(i))
            ans++;
    }

    return
ans;
}

main
()
{

    int
t;
    int
a,b,i;
    scanf("%d",&t);
    while
(t--)
    {

        memset(g,0,sizeof(g));
        scanf("%d%d",&p,&n);
        for
(i=1;i<=p;i++)
        {

            scanf("%d",&a);
            while
(a--)
            {

                scanf("%d",&b);
                g[i][b]=1;
            }
        }

        if
(hun()==p)
            printf("YES/n");
        else

            printf("NO/n");
    }

原创粉丝点击