poj 1469 二分图最大匹配

来源:互联网 发布:淘宝收复女短裤 编辑:程序博客网 时间:2024/05/20 21:22

传送门

题意:有p门课,n个学生。给你每节课选的学生编号。要组成个委员会,由各门课课代表组成,学了某门课的人都可能成为该课课代表,在委员会的每个人都是1门课的课代表,问能否组成委员会。

思路:判断最大匹配是否等于课的门数即可。


ps:代码好久前的了,变量有点混乱,见谅。

#include<iostream>#include<cstdio>#include<cstring>using namespace std;int n,m,l[305],t,num,a,ans;bool v[400],p[400][400];bool dfs(int x){    for(int i=1;i<=m;i++)    {        if(p[x][i]&&!v[i])        {            v[i]=1;            if(l[i]==-1||dfs(l[i]))            {                l[i]=x;                return true;            }        }    }    return false;}int main(){    scanf("%d",&t);    while(t--)    {        memset(l,-1,sizeof(l));        memset(p,0,sizeof(p));        scanf("%d%d",&n,&m);        for(int i=1;i<=n;i++)        {            scanf("%d",&num);            for(int j=0;j<num;j++)            {                scanf("%d",&a);                p[i][a]=1;            }        }        ans=0;        for(int i=1;i<=n;i++)        {            memset(v,0,sizeof(v));            if(dfs(i))ans++;        }        if(ans==n)cout<<"YES"<<endl;        else cout<<"NO"<<endl;    }    return 0;}


原创粉丝点击