题意:

有P门课,N个学生,给出每门课上的人。

然后问你能不能使得每门课有一个课代表

思路:

课和学生是两类,且同类之间没有关系,构成二分图;直接就是一个最大匹配问题;

注意点:

1.是给课进行匹配不是学生

2.比如二分图有A,B两类,A与B允许编号相同,但是如果A中的点到B中的点建边,

这个意义是A对B有关系,B能去匹配A,这一定不是双向边,双向边就额外多了层关系啊,

而且如果有额外匹配空间是利用一个配偶数组(就是存匹配对象的配偶,其实就是A->B->A),然后去询问A还能不能额外在匹配一个;

#include<bits/stdc++.h>
using namespace std;
typedef long long LL; const int N=6e4+10;
const int M=4e2+10; struct asd{
int to;
int next;
};
asd q[N];
int head[N],tol;
int cy[M],p,n;
bool vis[M]; void init()
{
tol=0;
memset(head,-1,sizeof(head));
} void add(int u,int v)
{
q[tol].to=v;
q[tol].next=head[u];
head[u]=tol++;
} bool Find(int u)
{
for(int i=head[u];i!=-1;i=q[i].next)
{
int v=q[i].to;
if(!vis[v])
{
vis[v]=true;
if(cy[v]==-1||Find(cy[v]))
{
cy[v]=u;
return true;
}
}
}
return false;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&p,&n);
int num,x;
init();
for(int i=0;i<p;i++){
scanf("%d",&num);
while(num--)
{
scanf("%d",&x);
add(i,x);
}
}
int ans=0;
memset(cy,-1,sizeof(cy));
for(int i=0;i<p;i++)
{
memset(vis,0,sizeof(vis));
if(Find(i))
ans++;
}
if(ans!=p)
puts("NO");
else
puts("YES");
}
return 0;
}

HDU1083 【匹配问题】的更多相关文章

  1. HDU1083 :Courses(二分图匹配)

    Cources Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  2. [kuangbin带你飞]专题十 匹配问题 二分匹配部分

    刚回到家 开了二分匹配专题 手握xyl模板 奋力写写写 终于写完了一群模板题 A hdu1045 对这个图进行 行列的重写 给每个位置赋予新的行列 使不能相互打到的位置 拥有不同的行与列 然后左行右列 ...

  3. HDU1083 Courses —— 二分图最大匹配

    题目链接:https://vjudge.net/problem/HDU-1083 Courses Time Limit: 20000/10000 MS (Java/Others)    Memory ...

  4. HDU-1083 Courses 二分图 最大匹配

    题目链接:https://cn.vjudge.net/problem/HDU-1083 题意 有一些学生,有一些课程 给出哪些学生可以学哪些课程,每个学生可以选多课,但只能做一个课程的代表 问所有课能 ...

  5. javascript匹配各种括号书写是否正确

    今天在codewars上做了一道题,如下 看上去就是验证三种括号各种嵌套是否正确书写,本来一头雾水,一种括号很容易判断, 但是三种怎么判断! 本人只是个前端菜鸟,,不会什么高深的正则之类的. 于是,在 ...

  6. scanf类型不匹配造成死循环

        int i = 0; while (flag) { printf("please input a number >>> "); scanf("% ...

  7. 使用注解匹配Spring Aop切点表达式

    Spring中的类基本都会标注解,所以使用注解匹配切点可以满足绝大部分需求 主要使用@within()/@target @annotaton() @args()等... 匹配@Service类中的所有 ...

  8. .net使用正则表达式校验、匹配字符工具类

    开发程序离不开数据的校验,这里整理了一些数据的校验.匹配的方法: /// <summary> /// 字符(串)验证.匹配工具类 /// </summary> public c ...

  9. webpack配置别名alias出现的错误匹配

    @(webpack) webpack是一款功能强大的前端构建工具,不仅仅是针对js,它也可通过各种loader来构建相关的less,html,image等各种资源,将webpack配合流程制定工具gu ...

随机推荐

  1. Vue使用axios

    main.js-------------------   import axios from "axios"; import qs from "qs"; imp ...

  2. photoswipe 实现图片的单击放大

    1.项目结构 2.HTML 代码 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&qu ...

  3. sort_action

    li, r = [23,8, 45, 5, 0, -6, 745,8, 8], [] while (len(li) > 0): loop_, min, tag = len(li), li[0], ...

  4. The basic principle of test case 修改引擎

    The basic principle of test case evaluation is that output resulting from running a test case is com ...

  5. 7.JavaScript变量

    VAR声明变量,一条语句可以声明多个变量 var name="Gates", age=56, job="CEO"; Value = undefined 在计算机 ...

  6. 20170301 Excel 分多个sheet 导出

     要么上传个EXCEL模板 里面已经有规定好的SHEET页了   要么直接打开个EXCEL  代码里ADDsheet页来做     就是这么点区别 [园工]CD-ABAP-win<allenjj ...

  7. LwIP移植uCos+stm32f407

    LwIP同操作系统一起工作的时候模型如下: 1.TCP/IP协议栈和应用程序以分离的任务运行 2.应用同协议栈沟通是通过API函数调用(API函数调用事实上就是通过OS自带的进程间通信机制,由应用程序 ...

  8. html5--5-3 给直线添加样式

    html5--5-3 给直线添加样式 学习要点 strokeStyle属性:设置颜色.渐变或模式(本节课只涉及到颜色) lineWidth属性:--设置线宽 Canvas的路径方法 moveTo() ...

  9. H3C-路由器密码恢复

    路由器密码恢复: 1.先关闭电源,重新启动路由器,注意终端上显示 press CTRL+B to enter extended boot menu 的时候,我们迅速按下ctrl+B,这样将进入扩展启动 ...

  10. 【C】论‘\r’和'\n'的纯粹性