洛谷 [P2763]试题库问题
非常舒适的最大流
非常显然的建图方法,然而因为数组开小卡了很长时间
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN=2500,MAXM=100005;
int head[MAXN],dep[MAXN],maxflow,nume,s,term,n,k,m,cur[MAXN];
struct edge{
int to,nxt,cap,flow;
}e[MAXM];
void adde(int from,int to,int cap){
e[++nume].to=to;
e[nume].cap=cap;
e[nume].nxt=head[from];
head[from]=nume;
}
bool bfs(){
queue<int> q;
memset(dep,0,sizeof(dep));
q.push(s);dep[s]=1;
while(!q.empty()){
int u=q.front();q.pop();
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(!dep[v]&&e[i].flow<e[i].cap){
dep[v]=dep[u]+1;
q.push(v);
}
}
}
return dep[term];
}
int dfs(int u,int flow){
if(u==term) return flow;
int tot=0;
for(int &i=cur[u];i&&tot<flow;i=e[i].nxt){
int v=e[i].to;
if(dep[v]==dep[u]+1&&e[i].flow<e[i].cap){
if(int t=dfs(v,min(flow-tot,e[i].cap-e[i].flow))){
e[i].flow+=t;
e[((i-1)^1)+1].flow-=t;
tot+=t;
}
}
}
return tot;
}
void dinic(){
while(bfs()){
for(int i=s;i<=term;i++) cur[i]=head[i];
maxflow+=dfs(s,0x3f3f3f3f);
}
}
int main(){
cin>>k>>n;
s=0,term=n+k+1;
for(int i=1;i<=k;i++){
int t;
scanf("%d",&t);
m+=t;
adde(s,i,t);adde(i,s,0);
}
for(int i=1;i<=n;i++){
int t;
scanf("%d",&t);
for(int j=1;j<=t;j++){
int ttt;
scanf("%d",&ttt);
adde(ttt,i+k,1);adde(i+k,ttt,0);
}
adde(i+k,term,1);adde(term,i+k,0);
}
dinic();
//printf("%d %d\n",m,maxflow);
if(m!=maxflow){
printf("No Solution!\n");
}else {
for(int i=1;i<=k;i++){
printf("%d: ",i);
for(int j=head[i];j;j=e[j].nxt){
if((e[j].flow)&&e[j].to!=s) printf("%d ",e[j].to-k);
}
printf("\n");
}
}
}
洛谷 [P2763]试题库问题的更多相关文章
- 洛谷 P2763 试题库问题(网络流24题之一)
题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...
- [洛谷P2763]试题库问题
题目大意:有 $k$ 种类型和 $n$ 个题目,每个题目会适应部分类型,第$i$个类型需要$s_i$的题,一道题只能满足一种类型,现要求出满足所有类型的题目的方案 题解:看到匹配,想到网络流,源点向试 ...
- 洛谷P2763 试题库问题(最大流)
题意 $n$道试题,每道题有多种类别属性 抽取$m$道题组成试卷,要求包含指定的类型 输出方案 Sol 又是一道zz网络流 我的构图长这样,$k_i$表示第$i$道试题需要的数量 #include&l ...
- 洛谷P2763 试题库问题(最大流)
传送门 网络流界的一股清流啊……终于没那么变态了…… 考虑一下怎么建图.对于每一个类型,我们从$S$向他连边,容量为它所需的题数,表明它要可以有这么多题,对于每一道题目,我们从它对应的类型向他连边,容 ...
- 洛谷 P2763 试题库问题【最大流】
s向所有类别属性连流量为当前类别属性需要的个数的边,所有题目向t连流量为1的边(表示只能选一次),所有属性向含有它的题连容量为1的边.跑一变dinic,结果小于m则无解,否则看每一个类别属性连出去的题 ...
- P2763 试题库问题(dinic)
P2763 试题库问题 dinic 搞个虚拟源点和汇点,瞎建建边就好辣. 偷张图↓↓ 如果没满流就是无解辣 输出方案咋办呢? 枚举每种类型,蓝后枚举它们的边 如果该边被使用了(通过判断反向边的流量), ...
- 【题解】 P2763 试题库问题(网络流)
P2763 试题库问题 考虑一个试题要被加入进答案的集合有什么条件? 是某种类型 只算作一次 就这两种且的限制,所以我们用串联的方式连接"类型点"和"作用点". ...
- 网络流问题 P2763 试题库问题
题目描述 «问题描述: 假设一个试题库中有n道试题.每道试题都标明了所属类别.同一道题可能有多个类别属性.现要从题库中抽取m 道题组成试卷.并要求试卷包含指定类型的试题.试设计一个满足要求的组卷算法. ...
- 【洛谷 P2763】 试题库问题(最大流)
题目链接 6/23 这是网络流23题里我第一个没看题解自己写出来一遍过的.. 这题应该是最简单的模型了吧. 从源点向每个类型连一条流量为这个类型要的题数,再从每个类型向可以属于这个类型的所有试题连一条 ...
随机推荐
- oracle erp 表结构
BOM模块常用表结构 表名: bom.bom_bill_of_materials 说明: BOM清单父项目 BILL_SEQUENCE_ID NUMBER 清单序号(关键字)ASSEMBLY_ITEM ...
- 应用fstream格式化输出
我举一个我应用的例子 file.open("shoroud.jrf" ,ios_base::trunc); //打开文件,清空文件内容 if(!file.good()) { pri ...
- [国嵌笔记][025][ARM指令分类学习]
算术和逻辑指令 1.mov 格式:mov {条件}{s} <dest>, <op> 作用:把一个值从一个地方移动到另一个地方,<dest>必须是寄存器 示例: @m ...
- Android-第三天
今天开始做一个提交的页面,本来是用LinearLayout,但是这种布局要使用到多组LinearLayout,于是采用表格布局+相对布局的方式. <TableLayout> <Tab ...
- Java Reflection 反射基础
反射基础: package reflection; /** * Created by : Infaraway * DATE : 2017/3/2 * Time : 23:06 * Funtion : ...
- 频繁更换ip会影响SEO优化吗?
网站更换ip会不影响SEO的效果,其实网站更换ip是正常的(但不能频繁更换),搜索引擎抓取是根据网站的域名进行的,不是根据ip来抓取你的网站.在短时间内更换IP对SEO的效果并没有很大的影响. 如果是 ...
- Python判断文件是否存在的三种方法【转】
转:http://www.cnblogs.com/jhao/p/7243043.html 通常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先 ...
- 解决span的bug--不能自动换行的问题
span标签元素不能自动换行,在超出父盒子的宽度后不能够自动换行 如下界面: 解决办法:将span属性加上display:block设置为行级元素:设置宽度然后在强制断行 效果如下:
- _3_form_标签
什么是input标签? 处理输入信息 input有哪些类型? 选择: <input type="checkbox"> 多选框,选择爱好等 <input type= ...
- 本地计算机上的OracleOraDb10g_home1TNSListener服务启动后又停止了..........解决办法
方法1.直接修改 listener.ora 我机器上的路径是: D:/Oracle/product/10.2.0/db_1/NETWORK/ADMIN/listener.ora 修改其中的 HOST ...