传统弱校HFUT的蒟蒻,真相只有一个

HDU 1083 网络流之二分图匹配

http://acm.hdu.edu.cn/showproblem.php?pid=1083

二分图匹配用得很多

这道题只需要简化的二分匹配

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxm 410
using namespace std;
int p,n;
int master[maxm];
int linking[maxm][maxm];
int has[maxm];
int solve(int x)//x课
{
    int i;
    for(i=1;i<=n;i++)
    {
        if(linking[x][i]&&!has[i])
        {
            has[i]=1;
            if(!master[i]||solve(master[i]))
            {
                master[i]=x;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    int m,sum=0;
    scanf("%d",&m);
    while(m--)
    {
        scanf("%d%d",&p,&n);
        memset(master,0,sizeof(master));
        memset(linking,0,sizeof(linking));
        for(int i=1;i<=p;i++)
        {
            int course;
            int student;
            scanf("%d",&course);
            for(int j=1;j<=course;j++)
            {
                scanf("%d",&student);
                linking[i][student]=1;
            }
        }
        for(int donser=1;donser<=p;donser++)
        {
            memset(has,0,sizeof(has));
            if(solve(donser)) sum++;
        }
        if(sum==p) printf("YES\n");
        else printf("NO\n");
        sum=0;
    }
    return 0;
}

 

posted @ 2016-02-29 10:52  未名亚柳  阅读(152)  评论(0编辑  收藏  举报