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 ...
随机推荐
- Python操作文件、文件夹、字符串
Python 字符串操作 去空格及特殊符号 s.strip().lstrip().rstrip(',') 复制字符串 #strcpy(sStr1,sStr2) sStr1 = 'strcpy' sSt ...
- 禁止在 .NET Framework 中执行用户代码。启用 "clr enabled" 配置选项
exec sp_configure 'show advanced options', '1';goreconfigure;goexec sp_configure 'clr enabled', '1'g ...
- 9.Parameters
1.Optional and Named Parameters calls these methods can optionally not specify some of the arguments ...
- 复制选中的listbox内容
private void lt_log_MouseClick(object sender, MouseEventArgs e) { Clipboard.SetDataObject(lt_log.Sel ...
- ACDC
acdc dcdc电源模块中大功率一般都是开关电源模式的,所以一般输入都是一个较宽的电源范围,体积也相对于变压器要小一些,效率高一些,但是纹波会偏大一些,如何选择就要看电路的需求来选择相应的方案
- iOS - UILabel
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UILabel : UIView <NSCoding> @available(iOS 2.0, *) p ...
- c++ primer 的 textquery 例子。
总共3种方法,一种是第四版书上的面向对象的教学方法.一种是实际中应该使用的简洁方法.一种是模板的方法. 1)第四版书中,面向对象的方法,基类,继承,多态 2)自己的更简洁的写法.(前提条件:如果不需要 ...
- 老笔记本_Win7_U盘_ReadyBoost
老笔记本 Win7 U盘 ReadyBoost 值得尝试
- [转载] TLS协议分析 与 现代加密通信协议设计
https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...
- mysql 聚集函数需要注意的问题
1.当没有记录的时候,使用聚集函数,会导致出现一条记录,记录的取值都是NULL,如下:mysql> select name from student where name='David';Emp ...