标签:mamicode
| Time Limit: 1000MS | Memory Limit: 10000K | |
| Total Submissions: 17153 | Accepted: 6740 | 
Description
Input
Output
Sample Input
2 3 3 3 1 2 3 2 1 2 1 1 3 3 2 1 3 2 1 3 1 1
Sample Output
YES NO
题意:一共有N个学生跟P门课程,一个学生可以任意选一
门或多门课,问是否达成:
1.每个学生选的都是不同的课(即不能有两个学生选同一门课)
2.每门课都有一个代表(即P门课都被成功选过)
注意:学生可有没选上课的。
匈牙利算法求最大匹配:
#include"stdio.h"
#include"string.h"
#define N 305
int g[N][N],link[N];
int mark[N],n,p;
int find(int k)
{
    int i;
    for(i=1;i<=n;i++)
    {
        if(g[k][i]&&!mark[i])
        {
            mark[i]=1;
            if(!link[i]||find(link[i]))
            {
                link[i]=k;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
    int i,T,m,v;
    scanf("%d",&T);
    while(T--)
    {
        memset(g,0,sizeof(g));
        memset(link,0,sizeof(link));
        scanf("%d%d",&p,&n);
        for(i=1;i<=p;i++)
        {
            scanf("%d",&m);
            while(m--)
            {
                scanf("%d",&v);
                g[i][v]=1;
            }
        }
        int ans=0;
        for(i=1;i<=p;i++)
        {
            memset(mark,0,sizeof(mark));
            ans+=find(i);
        }
        if(ans==p)
            printf("YES\n");
        else
            printf("NO\n");
    }
    return 0;
}
poj 1469 (hdu1083)COURSES 最大匹配
标签:mamicode
原文地址:http://blog.csdn.net/u011721440/article/details/38080417