HDU-----(1083)Courses(最大匹配)
Courses
Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 3767 Accepted Submission(s): 1800
a group of N students and P courses. Each student visits zero, one or
more than one courses. Your task is to determine whether it is possible
to form a committee of exactly P students that satisfies simultaneously
the conditions:
. every student in the committee represents a different course (a student can represent a course if he/she visits that course)
. each course has a representative in the committee
Your
program should read sets of data from a text file. The first line of
the input file contains the number of the data sets. Each data set is
presented in the following format:
P N
Count1 Student1 1 Student1 2 ... Student1 Count1
Count2 Student2 1 Student2 2 ... Student2 Count2
......
CountP StudentP 1 StudentP 2 ... StudentP CountP
The
first line in each data set contains two positive integers separated by
one blank: P (1 <= P <= 100) - the number of courses and N (1
<= N <= 300) - the number of students. The next P lines describe
in sequence of the courses . from course 1 to course P, each line
describing a course. The description of course i is a line that starts
with an integer Count i (0 <= Count i <= N) representing the
number of students visiting course i. Next, after a blank, you'll find
the Count i students, visiting the course, each two consecutive
separated by one blank. Students are numbered with the positive integers
from 1 to N.
There are no blank lines between consecutive sets of data. Input data are correct.
The
result of the program is on the standard output. For each input data
set the program prints on a single line "YES" if it is possible to form a
committee and "NO" otherwise. There should not be any leading blanks at
the start of the line.
An example of program input and output:
3 3
3 1 2 3
2 1 2
1 1
3 3
2 1 3
2 1 3
1 1
NO
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int maxn=;
vector<int>mat[maxn];
int judge[maxn];
bool vis[maxn];
bool skm(int x){
vector<int>::iterator it;
for(it=mat[x].begin();it<mat[x].end();it++)
{
if(!vis[*it])
{
vis[*it]=;
if(judge[*it]==||skm(judge[*it]))
{
judge[*it]=x;
return ;
}
}
}
return ;
} int main()
{
int cas,n,m,t,a,i;
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d",&n,&m);
memset(judge,,sizeof(int)*(m+));
for( i=;i<=n;i++)
{
mat[i].clear();
scanf("%d",&t);
while(t--){
scanf("%d",&a);
mat[i].push_back(a);
}
}
for(i=;i<=n;i++){
memset(vis,,sizeof(bool)*(m+));
if(!skm(i))break;
}
if(i>n) printf("YES\n");
else printf("NO\n");
}
return ;
}
采用邻接矩阵做:
#include<cstdio>
#include<cstring>
#include<vector>
#include<cstdlib>
#include<iostream>
using namespace std;
const int maxn=;
bool mat[maxn][maxn];
int judge[maxn];
bool vis[maxn];
int n,m;
bool skm(int x){
for(int i=;i<=m;i++)
{
if(!vis[i]&&mat[x][i])
{
vis[i]=;
if(judge[i]==||skm(judge[i]))
{
judge[i]=x;
return ;
}
}
}
return ;
}
int main()
{
int cas,t,a,i;
//freopen("test.in","r",stdin);
scanf("%d",&cas);
while(cas--)
{
scanf("%d%d",&n,&m);
memset(judge,,sizeof(judge));
memset(mat,,sizeof(mat));
for( i=;i<=n;i++)
{
scanf("%d",&t);
while(t--)
{
scanf("%d",&a);
mat[i][a]=;
}
}
for(i=;i<=n;i++){
memset(vis,,sizeof(vis));
if(!skm(i))break;
}
if(i>n)
printf("YES\n");
else
printf("NO\n");
}
return ;
}
HDU-----(1083)Courses(最大匹配)的更多相关文章
- hdu 1083 Courses (最大匹配)
CoursesTime Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- HDU 1083 Courses 【二分图完备匹配】
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1083 Courses Time Limit: 20000/10000 MS (Java/Others) ...
- hdu 1083 Courses(二分图最大匹配)
题意: P门课,N个学生. (1<=P<=100 1<=N<=300) 每门课有若干个学生可以成为这门课的代表(即候选人). 又规定每个学生最多只能成为一门课的代 ...
- HDU 1083 Courses(最大匹配模版题)
题目大意: 一共有N个学生跟P门课程,一个学生可以任意选一 门或多门课,问是否达成: 1.每个学生选的都是不同的课(即不能有两个学生选同一门课) 2.每门课都有一个代表(即P门课都被成功选过 ...
- HDU 1083 - Courses - [匈牙利算法模板题]
题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=1083 Time Limit: 20000/10000 MS (Java/Others) M ...
- HDU - 1083 Courses /POJ - 1469
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1083 http://poj.org/problem?id=1469 题意:给你P个课程,并且给出每个课 ...
- hdu - 1083 - Courses
题意:有P门课程,N个学生,每门课程有一些学生选读,每个学生选读一些课程,问能否选出P个学生组成一个委员会,使得每个学生代言一门课程(他必需选读其代言的课程),每门课程都被一个学生代言(1 <= ...
- HDU 1083 Courses(二分图匹配模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1083 题意:有p门课和n个学生,每个学生都选了若干门课,每门课都要找一个同学来表演,且一个同学只能表演一门课,判 ...
- HUD——1083 Courses
HUD——1083 Courses Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- (匹配)Courses -- hdu --1083
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1083 http://acm.hust.edu.cn/vjudge/contest/view.action ...
随机推荐
- javascript encodeURI和encodeURIComponent的比较
总结:encodeURI对除三种字符()之外的字符进行编码 encodeURIComponent对除两种字符之外的字符进行编码,保留字符会被转义 在进行SaaS前端开发的时候,大家经常会用到两个Jav ...
- HUD 2203 亲和串
HUD 2203 亲和串 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768K (Java/Others) [题目描述 - ...
- javascript权威指南笔记--javascript语言核心(一)
1.javascript的数据类型分为两类:原始类型和对象类型. 原始类型包括字符串.数字.布尔值.null.undefined. 对象是属性的集合,每个对象都由“名/值”对构成.数组和函数是特殊的对 ...
- Python基础学习笔记(八)常用字典内置函数和方法
参考资料: 1. <Python基础教程> 2. http://www.runoob.com/python/python-dictionary.html 3. http://www.lia ...
- 是时候改变你的开发方式了-XAF信息系统快速框架介绍
我是一名.Net开发者,从DOS时代Turbo c 算起(1996年),马上满20年了.想想写过的代码真是不少,却做了很多重复反复的编码工作.当然中间也带过团队做过几个大项目,但是代码仍没写够,还是每 ...
- C#正则表达式编程(一):C#中有关正则的类
正则表达式是一门灵活性非常强的语言,匹配同样的字符串可能在不同的开发人员那里会得到不同的结果,在平常的时候也是用的时候看看相关资料,不用的时候就丢在脑后了,尽管在处理大部分情况下都能迅速处理,但是处理 ...
- HttpServletResponse 学习
1: 利用Response向浏览器输出中文: private void test1(HttpServletResponse response) throws IOException { String ...
- 认识DOS
实验一.认识DOS实验 专业 物联网工程 姓名 叶慧敏 学号 201306104139 一. 实验目的 (1)认识DOS: (2)掌握命令解释程序的原理: (3)掌握简单的DOS调用方法: (4)掌 ...
- 百度之星Astar2016 Round2A
All X 等比数列求和一下 A/B MOD C = A MOD (B*C) / B 或者分治一下 Sitting in Line 状压+拓扑dp dp(i, j)表示当前二进制状态为j,当前状态的 ...
- linux学习笔记2-命令总结2
权限管理命令 chmod 其他权限管理名 chgrp chown umask ========================================================= ...