博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Courses
阅读量:6197 次
发布时间:2019-06-21

本文共 3623 字,大约阅读时间需要 12 分钟。

Courses Time Limit:10000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u

Submit

Description

Consider 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:
 

Sample Input

2
3 3
3 1 2 3
2 1 2
1 1
 
3 3
2 1 3
2 1 3
1 1
 

Sample Output

YES
NO
 题意:学生可以自由选择上什么课,上多少种课,每个学生可以代表一门课,问最后是否有的课没有找到学生可以代表。当然一个学生只能代表一门课。
明显匈牙利算法
1 #include
2 #include
3 #include
4 5 using namespace std; 6 7 #define N 330 8 9 int p, n, vis[N], used[N], maps[N][N];10 11 12 void init()13 {14 memset(vis, 0, sizeof(vis));15 memset(used, 0, sizeof(used));16 memset(maps, 0, sizeof(maps));17 }18 19 int found(int u)20 {21 for(int i = 1; i <= n; i++)22 {23 if(maps[u][i] && !vis[i]) // 这个学生愿意上这么课,24 {25 vis[i] = 1;26 if(!used[i] || found(used[i])) // 并且这个学生没有代表其他课,或者它代表的课有其他人代表,那么这个人就可以代表这门课27 {28 used[i] = u;29 return true;30 }31 }32 }33 return false;34 }35 36 int main()37 {38 int t, q, x;39 40 scanf("%d", &t);41 42 while(t--)43 {44 init();45 46 scanf("%d%d", &p, &n);47 48 for(int i = 1; i <= p; i++)49 {50 scanf("%d", &q);51 while(q--)52 {53 scanf("%d", &x);54 //used[x] = i;55 maps[i][x] = 1; // i 这门课被x学生代表56 }57 }58 59 int flag = 0;60 61 for(int i = 1; i <= p; i++)62 {63 memset(vis, 0, sizeof(vis));64 65 if(!found(i)) // 如果这门课找不到学生代表,flag=1,break;只要有一门课找不到别人代表,就printf “NO66 {67 flag = 1;68 break;69 }70 }71 if(flag)72 printf("NO\n");73 else74 puts("YES");75 }76 return 0;77 }

 

转载于:https://www.cnblogs.com/Tinamei/p/4718722.html

你可能感兴趣的文章
[译] VUE 和 VUEX 中的数据流
查看>>
vue-cli + webpack 多页面实例配置优化方法
查看>>
ZigBee 学习笔记 - 第1章 ZigBee 技术原理(让人抓狂的 ZigBee 缩写列表)
查看>>
一个经典的javascript面试题的新探索
查看>>
VirtualBox的VDI空间扩展
查看>>
Error:java.lang.UnsupportedClassVersionError...解决方案
查看>>
两种常用的排序算法
查看>>
Javascript中字符串方法总结
查看>>
使用 StackView 实现魔术般的视图旋转适配
查看>>
开发规范(三)CSS规范
查看>>
数据科学与机器学习导论
查看>>
兼容性总结
查看>>
Javascript:ajax
查看>>
node上转接RESTful风格接口
查看>>
JAVA JNI 动态注册
查看>>
改用pypy运行django项目
查看>>
用工具武装自己
查看>>
在OpenResty中需要避免全局变量的使用
查看>>
FlowTextView源码分析
查看>>
Ant Design 3.13.4 发布,企业级的 UI 设计语言
查看>>