P2763 试题库问题

考虑一个试题要被加入进答案的集合有什么条件?

  • 是某种类型
  • 只算作一次

就这两种且的限制,所以我们用串联的方式连接"类型点"和"作用点"。

判断无解就判断容量是否满了。输出方案就输出有流量的边的终点。

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue> using namespace std; typedef long long ll;
inline int qr(){
register int ret=0,f=0;
register char c=getchar();
while(c<48||c>57)f|=c==45,c=getchar();
while(c>=48&&c<=57) ret=ret*10+c-48,c=getchar();
return f?-ret:ret;
} const int inf=0x3f3f3f3f;
const int maxn=1.9e3+5;
int nodecnt;
struct E{
int to,nx,w;
}e[50005];
int head[maxn];
int cur[maxn];
int d[maxn];
int cnt=-1,S,T,n,m,k;
vector< int > ve[maxn];
inline void add(const int&fr,const int&to,const int&w,const int&f){
//printf("fr=%d to=%d w=%d cnt=%d\n",fr,to,w,cnt);
e[++cnt]={to,head[fr],w};
head[fr]=cnt;
if(f)add(to,fr,0,0);
}
queue< int >q;
inline bool bfs(){
for(register int t=1;t<=n+k+2;++t) cur[t]=head[t],d[t]=0;
q.push(S);
d[S]=1;
while(!q.empty()){
register int now=q.front();
q.pop();
if(now==T)continue;
for(register int t=head[now];t!=-1;t=e[t].nx){
if(!d[e[t].to]&&e[t].w>0){
d[e[t].to]=d[now]+1;
q.push(e[t].to);
}
}
}
return d[T];
} int dfs(const int&now,const int&last,int fl){
if(now==T||fl==0)return fl;
register int ret=0;
for(register int&t=cur[now];t!=-1;t=e[t].nx){
if(e[t].w>0&&d[e[t].to]==d[now]+1&&fl){
int d=dfs(e[t].to,now,min(fl,e[t].w));
e[t].w-=d;e[t^1].w+=d;ret+=d;fl-=d;
}
}
return ret;
} inline int dinic(){
register int ret=0;
while(bfs()) ret+=dfs(S,0,inf);
return ret;
} int main(){
freopen("testlib.in","r",stdin);
freopen("testlib.out","w",stdout);
memset(head,-1,sizeof head);
k=qr();n=qr();
S=1;T=k+n+2;
for(register int t=1;t<=k;++t)
add(S,t+1,qr(),1);
for(register int t=1,t1;t<=n;++t){
t1=qr();
for(register int i=1;i<=t1;++i)
add(qr()+1,t+k+1,1,1);
add(t+k+1,T,1,1);
}
dinic();
int ok=1;
for(register int t=head[S];t!=-1;t=e[t].nx)
if(e[t].w) ok=0;
if(ok) {
//printf("%d\n",f);
for(register int now=2;now<=k+1;++now){
printf("i:%d ",now-1);
for(register int t=head[now];t!=-1;t=e[t].nx)
if(e[t].to!=1&&e[t].w==0)
printf("%d ",e[t].to-k-1);
putchar('\n');
}
}
else puts("No Solution!");
return 0;
}

【题解】 P2763 试题库问题(网络流)的更多相关文章

  1. P2763 试题库问题 (网络流 最大流)

    传送门 解题思路 比较简单的网络流,建图还是比较好想的.让源点向试题连流量为1的边,试题向所属类型连流量为1的边,类型向汇点连流量为需要此类试题的边.直接跑最大流,输出答案时找到那些满流的边所对的点. ...

  2. P2763 试题库问题(dinic)

    P2763 试题库问题 dinic 搞个虚拟源点和汇点,瞎建建边就好辣. 偷张图↓↓ 如果没满流就是无解辣 输出方案咋办呢? 枚举每种类型,蓝后枚举它们的边 如果该边被使用了(通过判断反向边的流量), ...

  3. 网络流问题 P2763 试题库问题

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

  4. 洛谷 P2763 试题库问题(网络流24题之一)

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

  5. 【题解】Luogu P2763 试题库问题

    原题传送门 这题很简单啊 从源点向k类题目分别连流量为所需数量的边 从每道题向汇点连一条流量为1的边(每题只能用1次) 从类型向对应的题目连一条流量为1的边 跑一遍最大流 如果最大流小于所需题目数量, ...

  6. [洛谷P2763]试题库问题

    题目大意:有 $k$ 种类型和 $n$ 个题目,每个题目会适应部分类型,第$i$个类型需要$s_i$的题,一道题只能满足一种类型,现要求出满足所有类型的题目的方案 题解:看到匹配,想到网络流,源点向试 ...

  7. 洛谷P2763 试题库问题(最大流)

    题意 $n$道试题,每道题有多种类别属性 抽取$m$道题组成试卷,要求包含指定的类型 输出方案 Sol 又是一道zz网络流 我的构图长这样,$k_i$表示第$i$道试题需要的数量 #include&l ...

  8. 洛谷P2763 试题库问题(最大流)

    传送门 网络流界的一股清流啊……终于没那么变态了…… 考虑一下怎么建图.对于每一个类型,我们从$S$向他连边,容量为它所需的题数,表明它要可以有这么多题,对于每一道题目,我们从它对应的类型向他连边,容 ...

  9. P2763 试题库问题

    传送门 显然的网络流,源点向所有题目连流量为1的边,表示一题只能用一次,题目向它的所有类型连边,流量设为1,类型向汇点连边流量为题目需要的该类型的数量 然后最大流 如果最大流小于总需要的类型题目数量则 ...

随机推荐

  1. ROS报错:IOError:[Errno 13]permission denied: /home/neousys/.ros/roscore-11311.pid"

    在安装ROS后启动ROS,输入:roscore 时报错: 这个问题是由于该路径下ros文件权限造成的. 输入以下命令修改权限: sudo chmod -R ~/.ros/ 修改完成后再次输入rosco ...

  2. Python基础:02数字

    1:Python标准整数类型等价于C的(有符号)长整型.整数一般以十进制表示,但是Python也支持八进制或十六进制来表示整数.八进制整数以数字“0”开始, 十六进制整数则以“0x”或“0X”开始. ...

  3. JQuery------库

    JQuery-------------模块.类库 集成了DOM/BOM/JS的类库 一.查找元素 DOM 10左右 JQuery: 选择器: 筛选: ps:版本: 1.x:兼容性最好.1.12推荐 2 ...

  4. ROS通过图形化界面控制和查看小乌龟参数

    ROS图形化界面能够让我们快速开发ROS,也有利于我们观测数据. 下面介绍一下利用图形化界面控制小乌龟按照指令行进和查看小乌龟的行进参数. 首先我们需要做一些准备工作: 在Terminal中运行以下命 ...

  5. iOS学习--详解UIView的 contentStretch属性

    通过实例和图片理解UIView的contentStretch属性 方法 通过一个图片建立一个简单的UIImageView 设置它的contentStretch属性 修改它的frame属性 观察 测试用 ...

  6. Android Joda-time工具类

    Joda-Time提供了一组Java类包用于处理包括ISO8601标准在内的date和time.可以利用它把JDK Date和Calendar类完全替换掉,而且仍然能够提供很好的集成.   Joda- ...

  7. visual studio 2013 修改mvc5的视图模板

    C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Extensions\Microsoft\Web\Mvc\Scaffol ...

  8. 洛谷 2403 [SDOI2010] 所驼门王的宝藏

    题目描述 在宽广的非洲荒漠中,生活着一群勤劳勇敢的羊驼家族.被族人恭称为“先知”的Alpaca L. Sotomon是这个家族的领袖,外人也称其为“所驼门王”.所驼门王毕生致力于维护家族的安定与和谐, ...

  9. div盒子或者图片并排居中

    要使div总是找不到原因居中很简单,float和display都可以实现,float就不说了,这里说一下display:line-block,比如四个或者多个div盒子,明明设置好了宽度后,总有一个上 ...

  10. H3C 典型数据链路层标准