博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【网络流24题】试题库问题
阅读量:4338 次
发布时间:2019-06-07

本文共 2548 字,大约阅读时间需要 8 分钟。

假设一个试题库中有n道试题。每道试题都标明了所属类别。同一道题可能有多个类别 属性。现要从题库中抽取m 道题组成试卷。并要求试卷包含指定类型的试题。试设计一个 满足要求的组卷算法。 编程任务: 对于给定的组卷要求,计算满足要求的组卷方案。
由文件input.txt提供输入数据。文件第1行有2个正整数k和n (2 <=k<= 20, k<=n<= 1000) k 表示题库中试题类型总数,n 表示题库中试题总数。第2 行有k 个正整数,第i 个正整数 表示要选出的类型i 的题数。这k个数相加就是要选出的总题数m。接下来的n行给出了题 库中每个试题的类型信息。每行的第1 个正整数p表明该题可以属于p类,接着的p个数是 该题所属的类型号。
程序运行结束时,将组卷方案输出到文件output.txt 中。文件第i 行输出 “i:”后接类 型i的题号。如果有多个满足要求的方案,只要输出1 个方案。如果问题无解,则输出“No Solution!”。

Sample Input

 

3 15 3 3 4 2 1 2 1 3 1 3 1 3 1 3 3 1 2 3 2 2 3 2 1 3 1 2 1 2 2 1 2 2 1 3 2 1 2 1 1 3 1 2 3
Sample Output
1: 1 6 8
2: 7 9 10
3: 2 3 4 5
 
题解:
(S,每一道题,1) (每种题型,T,需要的数量)(每道题,所属类型,1)
1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 const int N=1205,INF=1999999999; 7 int gi(){ 8 int str=0;char ch=getchar(); 9 while(ch>'9'||ch<'0')ch=getchar();10 while(ch>='0' && ch<='9')str=str*10+ch-'0',ch=getchar();11 return str;12 }13 int n,m,S=0,T,num=1,head[N];14 struct Lin{15 int next,to,dis;16 }a[N*N];17 void init(int x,int y,int z){18 a[++num].next=head[x];19 a[num].to=y;20 a[num].dis=z;21 head[x]=num;22 a[++num].next=head[y];23 a[num].to=x;24 a[num].dis=0;25 head[y]=num;26 }27 int dep[N],q[N];28 bool bfs()29 {30 memset(dep,0,sizeof(dep));31 dep[S]=1;q[1]=S;int u,t=0,sum=1,x;32 while(t!=sum)33 {34 x=q[++t];35 for(int i=head[x];i;i=a[i].next){36 u=a[i].to;37 if(dep[u] || a[i].dis<=0)continue;38 dep[u]=dep[x]+1;q[++sum]=u;39 }40 }41 return dep[T];42 }43 int dfs(int x,int flow)44 {45 if(x==T || !flow)return flow;46 int u,tmp,sum=0;47 for(int i=head[x];i;i=a[i].next){48 u=a[i].to;49 if(dep[u]!=dep[x]+1 || a[i].dis<=0)continue;50 tmp=dfs(u,min(flow,a[i].dis));51 a[i].dis-=tmp;a[i^1].dis+=tmp;52 sum+=tmp;flow-=tmp;53 if(!flow)break;54 }55 return sum;56 }57 int main()58 {59 int x,k,sum1=0;60 m=gi();n=gi();61 T=n+m+1;62 for(int i=1;i<=m;i++){63 x=gi();init(i+n,T,x);sum1+=x;64 }65 for(int i=1;i<=n;i++){66 init(S,i,1);67 k=gi();68 for(int j=1;j<=k;j++)x=gi(),init(i,x+n,1);69 }70 int tot=0,tmp;71 while(bfs()){72 tmp=dfs(S,INF);73 while(tmp)tot+=tmp,tmp=dfs(S,INF);74 }75 if(tot

 

转载于:https://www.cnblogs.com/Yuzao/p/6872881.html

你可能感兴趣的文章
阶段3 2.Spring_09.JdbcTemplate的基本使用_5 JdbcTemplate在spring的ioc中使用
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_02.ssm整合之搭建环境
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_3、快速创建SpringBoot应用之手工创建web应用...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_04.ssm整合之编写SpringMVC框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_5、SpringBoot2.x的依赖默认Maven版本...
查看>>
阶段3 3.SpringMVC·_07.SSM整合案例_08.ssm整合之Spring整合MyBatis框架
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_9、SpringBoot基础HTTP其他提交方法请求实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_12、SpringBoot2.x文件上传实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>