[返回网络流 24 题索引]

题目描述

假设一个试题库中有 nnn 道试题。每道试题都标明了所属类别。同一道题可能有多个类别属性。现要从题库中抽取 mmm 道题组成试卷。并要求试卷包含指定类型的试题。

Solution 2763\text{Solution 2763}Solution 2763

设表示题目的点为 PPP,表示类别的为 KKK。

首先从源 STSTST 到 PiP_iPi​ 连一条流量为 111 的边,即每道题只能选一次;

然后从 KiK_iKi​ 到 EDEDED 连一条流量为 aia_iai​ 的边,即每种类型需要选 aia_iai​ 道;

最后 ∀j∈Ti\forall j \in T_i∀j∈Ti​,从 PiP_iPi​ 给 KjK_jKj​ 连边,即每道题可以以相应类型的名义被选出。

方案即是所有 题目到类型 的连边中满流的那些。如果流量不满则无解。

附上 dalao ⚡cdecl⚡ 的代码。

#include <cstdio>
#include <cstring>
#include <queue> const int N = 1e3 + 31, M = 3e4 + 43, K = 22, INF = 0x3f3f3f3f; struct edge {
int to, next, w;
} e[M << 1];
int head[N], cnt = 1;
void addedge(int x, int y, int z) {
e[++cnt] = (edge){y, head[x], z};
head[x] = cnt;
e[++cnt] = (edge){x, head[y], 0};
head[y] = cnt;
} int level[N];
bool bfs(int s, int t) {
memset(level, 0, sizeof level);
std::queue<int> q;
q.push(s);
level[s] = 1;
while (!q.empty()) {
int pos = q.front();
q.pop();
for (int i = head[pos]; i; i = e[i].next) {
int nx = e[i].to;
if (level[nx] || !e[i].w) continue;
level[nx] = level[pos] + 1;
q.push(nx);
}
}
return level[t];
} int dfs(int s, int t, int flow) {
if (s == t) return flow;
int ret = 0;
for (int i = head[s]; flow && i; i = e[i].next) {
int nx = e[i].to;
if (level[s] + 1 == level[nx] && e[i].w) {
int tmp = dfs(nx, t, std::min(flow, e[i].w));
e[i].w -= tmp;
e[i ^ 1].w += tmp;
ret += tmp;
flow -= tmp;
}
}
return ret;
} int dinic(int s, int t) {
int ret = 0;
while (bfs(s, t)) ret += dfs(s, t, INF);
return ret;
} std::queue<int> out[K];
int n, k, x, y, sum;
int main() {
scanf("%d%d", &k, &n);
for (int i = 1; i <= k; i++) {
scanf("%d", &x);
addedge(n + i + 1, n + k + 2, x);
sum += x;
}
for (int i = 1; i <= n; i++) {
addedge(1, i + 1, 1);
for (scanf("%d", &x); x--;) {
scanf("%d", &y);
addedge(i + 1, n + y + 1, 1);
}
}
if (dinic(1, n + k + 2) != sum) return puts("No Solution!"), 0;
for (int i = 1; i <= n; i++) {
for (int j = head[i + 1]; j; j = e[j].next) {
if ((~j & 1) && !e[j].w) {
out[e[j].to - n - 1].push(i);
break;
}
}
}
for (int i = 1; i <= k; i++) {
printf("%d: ", i);
if (out[i].empty()) puts("");
while (!out[i].empty()) {
printf("%d%c", out[i].front(), " \n"[out[i].size() == 1]);
out[i].pop();
}
}
}

[网络流 24 题] luoguP2763 试题库问题的更多相关文章

  1. Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流)

    Libre 6006 「网络流 24 题」试题库 / Luogu 2763 试题库问题 (网络流,最大流) Description 问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同 ...

  2. liberOJ#6006. 「网络流 24 题」试题库 网络流, 输出方案

    #6006. 「网络流 24 题」试题库     题目描述 假设一个试题库中有 n nn 道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取 m mm 道题组成试卷.并要求 ...

  3. 【刷题】LOJ 6006 「网络流 24 题」试题库

    题目描述 假设一个试题库中有 \(n\) 道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取 \(m\) 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组 ...

  4. 【PowerOJ1742&网络流24题】试题库问题(最大流)

    题意: 思路: [问题分析] 二分图多重匹配问题,用最大流解决. [建模方法] 建立二分图,每个类别为X集合中的顶点,每个题为Y集合中的顶点,增设附加源S和汇T. 1.从S向每个Xi连接一条容量为该类 ...

  5. Cogs 732. [网络流24题] 试题库(二分图)

    [网络流24题] 试题库 ★★ 输入文件:testlib.in 输出文件:testlib.out 评测插件 时间限制:1 s 内存限制:128 MB «问题描述: 假设一个试题库中有n道试题.每道试题 ...

  6. 【线性规划与网络流 24题】已完成(3道题因为某些奇怪的原因被抛弃了QAQ)

    写在前面:SDOI2016 Round1滚粗后蒟蒻开始做网络流来自我拯救(2016-04-11再过几天就要考先修课,现在做网络流24题貌似没什么用←退役节奏) 做的题目将附上日期,见证我龟速刷题. 1 ...

  7. 【算法】【网络流24题】巨坑待填(成功TJ,有时间再填)

    ------------------------------------------------------------------------------------ 17/24 --------- ...

  8. 网络流基础&网络流24题

    网络最大流 dinic+当前弧优化. const int N=10007,M=100007,inf=1e9; int s,t,head[N],ver[M],edge[M],Next[M],tot=1, ...

  9. [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划

    [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划 试题描述 一个餐厅在相继的 \(N\) 天里,第 \(i\) 天需要 \(R_i\) 块餐巾 \((i=l,2,-,N)\) ...

随机推荐

  1. 喜大普奔,两个开源的 Spring Boot + Vue 前后端分离项目可以在线体验了

    折腾了一周的域名备案昨天终于搞定了. 松哥第一时间想到赶紧把微人事和 V 部落部署上去,我知道很多小伙伴已经等不及了. 1. 也曾经上过线 其实这两个项目当时刚做好的时候,我就把它们部署到服务器上了, ...

  2. IO流的工具类

    1.需要先导入jar包: FilenameUtils import org.apache.commons.io.FilenameUtils; public class FilenameUtilesDe ...

  3. 字节输入流InputStream

    import java.io.File; import java.io.FileInputStream; import java.io.IOException; public class FileIn ...

  4. Day 23 系统服务之救援模式

    1.CentOS6与Centos 7启动流程 4.运行级别C6&C7 0 关机 1 单用户模式 (超级权限 必须面对实体硬件) 2 暂未使用 3 字符界面(黑框) 4 暂未使用 5 图形界面 ...

  5. Day 17 软件管理2之搭建本地仓库

    1.列出yum源可用的软件仓库 [root@www.xuliangwei.com ~]# yum repolist [root@www.xuliangwei.com ~]# yum repolist ...

  6. Nginx--面试基础必会

    文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 最近一直在更新关于Nginx的系列文章,终于将Nginx的几个关键知识点讲的差不多了.本篇作为Nginx系列的 ...

  7. 挖穿各大SRC的短信轰炸

    今天给大家分享一个短信轰炸绕过的姿势,大疆.百度.腾讯等等src都有用此方法绕过的案例. 给大家看一下 这里就不给大家截图了,在src中提交的截图都没有打码,这里放出来不太方便. 这里就只举出大疆的例 ...

  8. 【面试题】SpringMVC部分面试题

    SpringMVC面试题 什么是SpringMVC ? 简单介绍下你对SpringMVC的理解 ? SpringMVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过Mo ...

  9. java-不定项参数(可变参数)的作用和使用方式

    引言: 我们在编写方法的过程中,可能会遇见一个方法有不确定参数个数的情况.一般我们会用方法重载来解决问题: 1 //方法重载,解决参数个数不确定问题 2 public void method(); 3 ...

  10. JavaScript系列:函数式编程(开篇)

    前言: 上一篇介绍了 函数回调,高阶函数以及函数柯里化等高级函数应用,同时,因为正在学习JavaScript·函数式编程,想整理一下函数式编程中,对于我们日常比较有用的部分. 为什么函数式编程很重要? ...