[wikioi2930]填报志愿(裸题)
来源:互联网 发布:人工智能主题的基金 编辑:程序博客网 时间:2024/03/28 20:50
填报志愿
- 题目描述 Description
高考已经结束,而志愿填报正在进行中~
吴校长的学校里有n位同学,每位同学有ki个愿意去的大学。而在吴老师的省份中,有m所大学有招生名额。根据往年的经验,对于每所大学(编号为ci),学校中最多只会有一人考上。因此为了避免志愿冲突,每年吴校长都要安排老师对同学们的志愿进行调整。
今年吴校长找到了你来帮忙,请你编程计算,在不冲突的情况下,最多能有多少同学顺利填报志愿,填报志愿的方案又是怎样的。
输入描述 Input Description
第一行,一个数n。
接下来的n行,每行的第一个数为ki,接下来有ki个数,表示第i个同学愿意去的大学的编号。下一行,一个数m。 下一行,m个数,为m个大学的编号。保证大学编号递增。
输出描述 Output Description
第一行,一个数,为在不冲突的情况下,最多能有多少同学顺利填报志愿。
接下来的若干行,输出填报志愿的方案。每行两个数,第一个数为学生编号,第二个数为大学编号,以空格隔开。若有多种可行方案,输出字典序最小的一种。
样例输入 Sample Input
3
2 1 2
3 2 4 5
2 2 3
5
1 3 4 5 6
样例输出 Sample Output
3
1 1
2 4
3 3
数据范围及提示 Data Size & Hint
0 < n<=1000, 0< ki<=20, 0 < m<=2000, 学生的编号为1~n, 大学的编号为1~5000。同学愿意去的大学不一定招生。
又是一道裸的二分图匹配,可以练练手。
#include <cstdio>#include <cstring>#define MAXN 1005using namespace std;int g[MAXN * 5][MAXN * 5], b[MAXN * 5];int link[MAXN * 5], num[MAXN * 5];int n, m;int ans = 0;int find(int x){ for (int j = 1; j <= m; ++j) { int y = num[j]; if (b[y] == 0 && g[x][y] == 1) { b[y] = 1; if (link[y] == 0 || find(link[y]) == 1) { link[y] = x; return 1; } } } return 0;}int main(){ int t; memset(g, 0, sizeof(g)); scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &t); for (int j = 1; j <= t; ++j) { int y; scanf("%d", &y); g[i][y] = 1; } } scanf("%d", &m); for (int i = 1; i <= m; ++i) scanf("%d", &num[i]); for (int i = 1; i <= n; ++i) { memset(b, 0, sizeof(b)); ans = ans + find(i); } printf("%d\n", ans); return 0;}
谢谢大家
0 0
- [wikioi2930]填报志愿(裸题)
- 如何填报第一志愿
- 高考志愿填报技巧
- 生活随笔:填报志愿
- codevs2930填报志愿
- 昨天填报了志愿
- 1060: 填报志愿 [水题]
- 你该如何填报高考志愿?
- 你该如何填报高考志愿?
- 2014甘肃高考志愿填报时间表
- 高考志愿填报 别迷信“大数据”
- codevs2930 填报志愿-还是二分图
- 填报高考志愿应注意哪几个具体问题
- 高考志愿填报指南:未来十大热门专业预测
- 填报高考志愿的“三大纪律,八项注意”
- 中等生填报高考志愿五大攻略
- 把握高考填报志愿梯度技巧 提高录取成功率
- 如何提高高考志愿填报成功率 招办主任指方略
- android -- 做个记录,以后方便回顾
- 2041.Runtime Error一般是数组不够大,Time Limit Exceeded一般是超时
- Apache下开启SSI配置使shtml支持include包含
- 如何获得客户端的真实IP
- linux编程
- [wikioi2930]填报志愿(裸题)
- 关于项目的风险控制
- 普通Java工程转换成maven工程
- SOJ.分数排名查询
- CSDN-MarkDown编辑器使用手册(4)--- 数学公式
- msql 导出
- 获取已经安装软件列表
- 过却三世又一生
- Java多线程银行存取款程序