POJ1469 COURSES

来源:互联网 发布:日本传统乐器知乎 编辑:程序博客网 时间:2024/05/21 19:28

题目:http://poj.org/problem?id=1469
分析:匈牙利水题
代码:

#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int Tmax=305;int n,p,map[Tmax][Tmax],s[Tmax],ans;bool v[Tmax];bool dfs(int x){    int i;    for(i=1;i<=n;i++)      if(v[i]==false&&map[x][i])      {        v[i]=true;        if(s[i]==0||dfs(s[i]))        {            s[i]=x;            return true;        }      }    return false;}int main(){    int T,i,u,len,j;    scanf("%d",&T);    while(T--)    {        scanf("%d%d",&p,&n);        ans=0;        memset(map,0,sizeof(map));        memset(s,0,sizeof(s));        for(i=1;i<=p;i++)        {            scanf("%d",&len);            for(j=1;j<=len;j++)            {                scanf("%d",&u);                map[i][u]=true;            }        }        for(i=1;i<=p;i++)        {            memset(v,0,sizeof(v));            if(dfs(i)) ans++;        }        if(ans==p) printf("YES\n");        else printf("NO\n");    }    return 0;}
0 0
原创粉丝点击