题意

$n$道试题,每道题有多种类别属性

抽取$m$道题组成试卷,要求包含指定的类型

输出方案

Sol

又是一道zz网络流

我的构图长这样,$k_i$表示第$i$道试题需要的数量

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int MAXN = 1e5 + , INF = 1e9 + ;
inline int read() {
char c = getchar(); int x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int K, N, S, T;
int need[MAXN];
vector<int>ans[MAXN];
struct Edge {
int u, v, f, nxt;
}E[MAXN];
int head[MAXN], cur[MAXN], num;
inline void add_edge(int x, int y, int f) {
E[num] = (Edge){x, y, f, head[x]};
head[x] = num++;
}
inline void AddEdge(int x, int y, int z) {
add_edge(x, y, z);
add_edge(y, x, );
}
int sum = , deep[MAXN];
bool BFS() {
queue<int> q; q.push(S);
memset(deep, , sizeof(deep)); deep[S] = ;
while(!q.empty()) {
int p = q.front(); q.pop();
for(int i = head[p]; i != -; i = E[i].nxt) {
int to = E[i].v;
if(!deep[to] && E[i].f) {
deep[to] = deep[p] + ;
q.push(to);
}
}
}
return deep[T] > ;
}
int DFS(int x, int flow) {
if(x == T) return flow;
int ansflow = ;
for(int &i = cur[x]; i != -; i = E[i].nxt) {
int to = E[i].v;
if(deep[to] == deep[x] + && E[i].f) {
int nowflow = DFS(to, min(flow, E[i].f));
E[i].f -= nowflow; E[i ^ ].f += nowflow;
ansflow += nowflow; flow -= nowflow;
if(flow <= ) break;
}
}
return ansflow;
}
int Dinic() {
int ans = ;
while(BFS()) {
memcpy(cur, head, sizeof(head));
ans += DFS(S, INF);
}
return ans;
}
int main() {
memset(head, -, sizeof(head));
K = read(); N = read(); S = ; T = N + K + ;
int sum = ;
for(int i = ; i <= K; i++) {
int x = read(); sum += x;
AddEdge(N + i, T, x);
}
for(int i = ; i <= N; i++) {
int n = read();
AddEdge(S, i, );
for(int j = ; j <= n; j++) {
AddEdge(i, read() + N, );
}
}
if(Dinic() < sum) {puts("No Solution!"); return ;}
for(int x = ; x <= N; x++)
for(int i = head[x]; i != -; i = E[i].nxt)
if(E[i].f == )
ans[E[i].v - N].push_back(x);
for(int i = ; i <= K; i++) {
printf("%d: ", i);
for(int j = ; j < ans[i].size(); j++) printf("%d ", ans[i][j]);
puts("");
}
return ;
}

最新文章

  1. HDU 5122 K.Bro Sorting(2014北京区域赛现场赛K题 模拟)
  2. Bruce Eckel:编程生涯(转载)
  3. ChartDirector应用笔记(三)
  4. yii2细节设置
  5. Event Logging
  6. 4.Knockout.Js(事件绑定)
  7. UITextAlignmentCenter&#39; is deprecated: first deprecated in iOS 6.0
  8. java数组中取出最大值
  9. VMware使两台windows虚拟机能够互相ping通
  10. Encode and Decode TinyURL
  11. Exception in thread &quot;main&quot; java.lang.NoClassDefFoundError: org/apache/hadoop/fs/CanUnbuffer
  12. Facebook 50%用户是虚假账号?我觉得可以更高!
  13. shell一些不为人知的技巧
  14. 详解MySQL主从复制实战 - 基于GTID的复制
  15. 在Android中调用KSOAP2库访问webservice服务出现的服务端返回AnyType{}
  16. spring mvc @ModelAttribute 每次执行requestmapping前自动执行
  17. ASP.NET Core读取appsettings.json配置文件信息
  18. iOS下简单实现滑动导航条
  19. 记录两道有趣的有关php数组的面试题
  20. &lt;td&gt;标签clospan和rowspan 可横跨列数和行数

热门文章

  1. Hive Metastore
  2. miller_rabin模板
  3. js中的width问题
  4. [Selenium] 如何使ChromeDriver 每次启动的端口不会随机变化
  5. 【ZJOI 2008】树的统计
  6. noip数学
  7. EF提高性能
  8. maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解
  9. NYOJ3——多边形重心问题
  10. mysql数据库基本操作(五)