POJ:1469 COURSES(匈牙利算法模版题)

来源:互联网 发布:适合程序员的博客 编辑:程序博客网 时间:2024/06/06 17:05

二分图最大匹配。

纯模版题,一点小错WA了两次。

 

#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <climits>#define MAXN 305using namespace std;int N,P,link[MAXN];bool vis[MAXN],gl[MAXN][MAXN];bool Match(int v){    for(int i=1; i<=N; ++i)        if(gl[v][i]&&!vis[i])        {            vis[i]=true;            if(!link[i]||Match(link[i]))            {                link[i]=v;                return true;            }        }    return false;}int main(){    int T;    scanf("%d",&T);    while(T--)    {        scanf("%d%d",&P,&N);        int n,v;        memset(gl,0,sizeof(gl));        for(int i=1; i<=P; ++i)        {            scanf("%d",&n);            for(int j=0; j<n; ++j)            {                scanf("%d",&v);                gl[i][v]=true;            }        }        memset(link,0,sizeof(link));        int ans=0;        for(int i=1; i<=P; ++i)        {            memset(vis,0,sizeof(vis));            if(Match(i))                ans++;        }        if(ans==P) puts("YES");        else puts("NO");    }    return 0;}