P2763 试题库问题
admin
2024-01-29 12:52:51
0

题目链接:P2763 试题库问题

题意

一个试题库中有 nnn 道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取 mmm 道题组成试卷。并要求试卷包含指定类型的试题的试题数量要达标。试设计一个满足要求的组卷算法。每道题选出来以后就只能算作一种类型了。

解析

匹配问题之二,一对多的的匹配问题,建图跑网络流。

每道题目可以看做与题的类型配对,每种类型的题有数目的要求。最终我们要选出题目,于是我们考虑将所有题目作为多源汇流向最终的汇点。

n+k+1n + k + 1n+k+1号:源点
n+1n + 1n+1 ~ n+kn + kn+k:代表题目的类型
111 ~nnn:代表nnn道题目
000号:汇点
1.1.1.每道题有多种类型,但最终选出来只能算作一种类型,那么其贡献流向的汇点流量应该为111。
2.2.2.每个题只能只能算作一个题型, 所以 题型 到有 相应题型的题目 的流量为111。
3.3.3.每种题目类型需要cnt道题,所以与源点连边的流量为cntcntcnt。

最终流到汇点的流量大于等于mmm就是可行的
注意边的数量并不算很小,博主自己估算为500050005000还RE了一发,最终开到100001000010000才过。

代码

#include 
#include 
#include 
#include 
using namespace std;
const int N = 2000, M =  10000;
struct edge{int to,nex,w;
}e[M];
int head[N], n, k, m, tot = 1;void add(int to,int from,int w){e[++ tot].w = w;e[tot].to = to;e[tot].nex = head[from];head[from] = tot;
}int dep[N];
bool bfs()
{for(int i = 0; i <= n + k + 1; i ++) dep[i] = 0;dep[n + k + 1] = 1;queueq;q.push(n + k + 1);while(!q.empty()){int u = q.front(); q.pop();for(int i = head[u]; i; i = e[i].nex){int v = e[i].to;if(e[i].w && !dep[v]){dep[v] = dep[u] + 1;if(v == 0) return true;q.push(v);}}}return dep[0];
}int dfs(int u,int inflow){if(u == 0)return inflow;int outflow = 0;for(int i = head[u]; i; i = e[i].nex){int v = e[i].to;if(e[i].w && dep[v] == dep[u] + 1){int flow = dfs(v, min(e[i].w, inflow));e[i].w -= flow;e[i ^ 1].w += flow;inflow -= flow;outflow += flow;}}if(!outflow) dep[u] = 0;return outflow;
}int main()
{ios::sync_with_stdio(false);cout.tie(NULL);cin >> k >> n;// 设0为汇点for(int i = 1; i <= n; i ++){ // 每道题有多种题目类型,但最终只能算作一种,所以每道题到汇点的流量为1add(0, i, 1);add(i, 0, 0);}for(int i = 1; i <= k; i ++){// 设n + k + 1为源点int cnt;cin >> cnt;m += cnt;add(i + n, n + k + 1, cnt);add(n + k + 1, i + n, 0);//需要cnt个,所以与源点连边的流量为cnt}for(int i = 1; i <= n; i ++){int num, x;cin >> num;while(num --){cin >> x; //每个题只能只能算作一个题型, 所以到每道题的流量为1add(i, n + x, 1);add(n + x, i, 0); }}int ans = 0;while(bfs()){ans += dfs(n + k + 1, 10000);}if(ans < m){cout << "No Solution!\n";return 0;}vector res;for(int i = n + 1; i <= n + k; i ++){res.clear();for(int j = head[i]; j; j = e[j].nex){if(e[j].to <= n && e[j].w == 0) res.push_back(e[j].to);}cout << i - n << ": ";for(int x : res){cout << x << " ";}cout << "\n";}return 0;
}

相关内容

热门资讯

原创 离... 在十大开国大将之中,萧劲光大将无疑是个性鲜明、成就卓著的代表。而与他相关的故事,也不仅仅局限于他个人...
儿童选择性缄默 出门不说话 推... 儿童选择性缄默:从心理机制到教育干预的实践路径 理论界定 儿童选择性缄默(Selective Mu...
“春季躁动”行情仍在延续 市场... ◆在配置方向上,机构观点显示,后续市场主线可能切换,前期以主题概念为主但缺乏基本面支撑的领域或难以为...
西安甲康高伟:甲状腺结节“定心... 在前文提到的甲状腺问题中,甲状腺结节是体检高频发现项,而桥本甲状腺炎患者也可能合并结节,这让不少人陷...
【浙商银行FICC·贵金属】避... 来源:市场资讯 (来源:浙商银行FICC) 行情回顾 2025/01/12-2025/01/16 ...
原创 果... 果然被我说中!正在访问中国的加拿大总理突然:宣布了一个大好消息: 1月16日,加拿大总理卡尼在宣布:...
人民财评:5.0%的增长,“十... 2025年,国民经济运行顶压前行、向新向优,高质量发展取得新成效。初步核算,全年国内生产总值1401...
去地产化短期阵痛:珠免集团20... 珠免集团(600185)1月19日晚间公告,预计2025年实现归属于母公司所有者的净利润亏损9.2亿...
京东工业+大觉新材“双碳”破局 (文/观察者网 张志峰) 绿色转型不是选择题,而是制造业高质量发展的必答题。 在“双碳”目标纵深...
1公斤200元,金银之后又一金... 最近,贵金属市场热潮涌动,特别是黄金和白银价格一路走高,成为大众追捧的投资焦点。而在这股热潮之下,又...
新三板打造专精特新服务高地 2... 新华社北京1月19日电 《中国证券报》19日刊发文章《新三板打造专精特新服务高地 2025年新增同意...
原创 特... 美国誓要拿下格陵兰岛,谁敢阻拦就要被加税,特朗普威胁话音刚落,德军麻利儿的撤了。 谁都知道,格陵兰...
原创 2... 嚯,听说了吗?金价好像下来点了。昨儿个楼下阿姨聊天还念叨,说想给闺女打镯子,不知道这会儿买是不是能省...
路畅科技将迎三连亏!此前转让子... 1月19日晚间,深圳市路畅科技股份有限公司(证券简称:路畅科技,股票代码:002813)公告称,公司...
绩优基金也“换将”?增聘优化管... 本报记者 彭衍菘 2026年开年,公募基金行业投研团队调整动作频频。截至1月18日,年内已有56家基...
李强总理座谈会上,上海企业CE... 中共中央政治局常委、国务院总理李强1月19日下午主持召开专家、企业家和教科文卫体等领域代表座谈会,听...
厦门象屿:象屿铝业正积极推进商... 来源:滚动播报 (来源:财闻) 2026年开年,象屿铝业正积极推进商业火箭型材认证,可望为公司参与万...
君乐宝冲刺港股:年营收近200... 雷递网 乐天 1月19日 综合乳制品企业君乐宝乳业集团股份有限公司(简称“君乐宝”)今日正式向香港联...
四方达:股东付玉霞计划减持公司... 每经AI快讯,四方达1月18日晚间发布公告称,持有河南四方达超硬材料股份有限公司股份约3420万股(...
股票异动停牌核查完毕 400亿... 今日聚焦 【易点天下:停牌核查结束 明起复牌】 【华菱线缆:终止收购星鑫航天控制权 标的公司为神舟系...