zoukankan      html  css  js  c++  java
  • 课程

    题目描述

    n个学生去p个课堂,每一个学生都有自己的课堂,并且每个学生只能去一个课堂,题目要求能够安排每一个课堂都有人吗?

    输入输出格式

    输入格式:

    第一行是测试数据的个数,

    每组测试数据的开始分别是p和n,

    接着p行,每行的开始是这个课堂的学生人数m,接着m个数代表该课堂的学生编号

    输出格式:

    如果该组数据能够这样安排就输出YES,否则输出NO。

    输入输出样例

    输入样例#1:
    2
    3 3
    3 1 2 3
    2 1 2
    1 1
    3 3
    2 1 3
    2 1 3
    1 1
    输出样例#1:
    YES
    NO

    裸的二分图,不多说,发上来常看看就可以了

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int n,m,t;
    int head[401],size;
    struct Edge
    {
        int next,to;
    }edge[60001];
    void putin(int from,int to)
    {
        size++;
        edge[size].next=head[from];
        edge[size].to=to;
        head[from]=size;
    }
    int match[30001];
    bool vis[401];
    bool dfs(int root)
    {
        int i;
        for(i=head[root];i!=-1;i=edge[i].next)
        {
            int y=edge[i].to;
            if(!vis[y])
            {
                vis[y]=1;
                if(match[y]==0||dfs(match[y]))
                {
                    match[root]=y;
                    match[y]=root;
                    return 1;
                }
            }
        }
        return 0;
    }
    int maxmatch(int m)
    {
        int ans=0,i;
        for(i=1;i<=m;i++)
        {
            memset(vis,0,sizeof(vis));
            ans+=dfs(i);
        }
        return ans;
    }
    int main()
    {
        int i,j,k,s;
        scanf("%d",&t);
        while(t--)
        {
            memset(head,-1,sizeof(head));
            memset(match,0,sizeof(match));
            scanf("%d%d",&m,&n);
            for(i=1;i<=m;i++)
            {
                scanf("%d",&k);
                for(j=1;j<=k;j++)
                {
                    scanf("%d",&s);
                    putin(i,m+s);
                    //putin(m+i,s);
                }
            }
            int ans=maxmatch(m);
            if(ans==m)printf("YES
    ");
            else printf("NO
    ");
        }
        return 0;
    }
  • 相关阅读:
    ASP.NET DropDownList 控件绑定数据
    Linux图形界面与命令行界面切换
    Linux性能分析
    UTF虚拟对象
    UFT场景恢复
    UFT参数化
    UFT检查点
    UFT三种录制方式
    UFT基本操作
    UFT安装目录简单介绍
  • 原文地址:https://www.cnblogs.com/huangdalaofighting/p/6786358.html
Copyright © 2011-2022 走看看