zoukankan      html  css  js  c++  java
  • 洛谷—— P2417 课程

    https://www.luogu.org/problemnew/show/2417

    题目描述

    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

    说明

    对于100%的数据,nle 100,mle 20000n100,m20000

     1 #include <cstring>
     2 #include <cstdio>
     3 
     4 inline void read(int &x)
     5 {
     6     x=0; register char ch=getchar();
     7     for(; ch>'9'||ch<'0'; ) ch=getchar();
     8     for(; ch>='0'&&ch<='9'; ch=getchar()) x=x*10+ch-'0';
     9 }
    10 
    11 const int M(20005);
    12 const int N(110);
    13 
    14 int n,p,sumvis;
    15 bool link[N][M];
    16 int vis[M],mat[M];
    17 
    18 bool find(int u)
    19 {
    20     for(int v=1; v<=n; ++v)
    21         if(vis[v]!=sumvis&&link[u][v])
    22         {
    23             vis[v]=sumvis;
    24             if(!mat[v]||find(mat[v]))
    25             {
    26                 mat[v]=u;
    27                 return 1;
    28             }
    29         }
    30     return false;
    31 }
    32 
    33 inline bool work()
    34 {
    35     int m,cnt=0;
    36     read(p),read(n);
    37     for(int u=1; u<=p; ++u)
    38     {
    39         read(m);
    40         for(int v; m--; )
    41           read(v),link[u][v]=1;
    42     }
    43     for(int i=1; i<=p; ++i)
    44     {
    45         sumvis++;
    46         cnt+=find(i);
    47     }
    48     return cnt==p;
    49 }
    50 
    51 inline void init()
    52 {
    53     sumvis=0;
    54     memset(mat,0,sizeof(mat));
    55     memset(vis,0,sizeof(vis));
    56     memset(link,0,sizeof(link));
    57 }
    58 
    59 int Presist()
    60 {
    61     int t; read(t);
    62     for(; t--; init())
    63       if(!work()) puts("NO");
    64       else puts("YES");
    65     return 0;
    66 }
    67 
    68 int Aptal=Presist();
    69 int main(int argc,char**argv){;} 
  • 相关阅读:
    VWG中设置URL编码的方法
    wordwrap breakword
    iis6下配置支持.net4.0&发布网站[转]
    MySQL修复打不开的视图定义
    DHTML CSS+JavaScript设计网页链接提示ToolTips
    C# 计算文件的MD5值
    .Net+IIS环境经常出现的问题及排障[转]
    我的WCF之旅(1):创建一个简单的WCF程序[转]
    C#嵌套类的使用方法及特性[转]
    设置<table>的固定长度
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7899306.html
Copyright © 2011-2022 走看看