【网络流24题】No.7 试题库问题 (最大流,二分图多重匹配)

【题意】

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

输入文件示例
input.txt
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

输出文件示例
output.txt
1: 1 6 8
2: 7 9 10
3: 2 3 4 5

 

【分析】

  二分图多重匹配, 应该是指 点可以选w[i]次,边只能选一次吧。

  这样就不能用匈牙利了吧。。[咦~~好像也可以,就是要记录所有w次匹配的是谁 然后枚举

  也可以把点拆开,然后做匈牙利,(有空再试试)

  嗯,最大流建边就很简单啦,那就不说了。。

 

  1 #include<cstdio>
  2 #include<cstdlib>
  3 #include<cstring>
  4 #include<iostream>
  5 #include<algorithm>
  6 #include<queue>
  7 #include<cmath>
  8 using namespace std;
  9 #define Maxn 1010
 10 #define INF 0xfffffff
 11 
 12 struct node
 13 {
 14     int x,y,f,o,next;
 15 }t[Maxn*1010];int len;
 16 int first[Maxn];
 17 
 18 int mymin(int x,int y) {return x<y?x:y;}
 19 int mymax(int x,int y) {return x>y?x:y;}
 20 
 21 void ins(int x,int y,int f)
 22 {
 23     t[++len].x=x;t[len].y=y;t[len].f=f;
 24     t[len].next=first[x];first[x]=len;t[len].o=len+1;
 25     t[++len].x=y;t[len].y=x;t[len].f=0;
 26     t[len].next=first[y];first[y]=len;t[len].o=len-1;
 27 }
 28 
 29 int st,ed;
 30 queue<int > q;
 31 int dis[Maxn];
 32 bool bfs()
 33 {
 34     while(!q.empty()) q.pop();
 35     memset(dis,-1,sizeof(dis));
 36     q.push(st);dis[st]=0;
 37     while(!q.empty())
 38     {
 39         int x=q.front();
 40         for(int i=first[x];i;i=t[i].next) if(t[i].f>0)
 41         {
 42             int y=t[i].y;
 43             if(dis[y]==-1)
 44             {
 45                 dis[y]=dis[x]+1;
 46                 q.push(y);
 47             }
 48         }
 49         q.pop();
 50     }
 51     if(dis[ed]==-1) return 0;
 52     return 1;
 53 }
 54 
 55 int ffind(int x,int flow)
 56 {
 57     if(x==ed) return flow;
 58     int now=0;
 59     for(int i=first[x];i;i=t[i].next) if(t[i].f>0)
 60     {
 61         int y=t[i].y;
 62         if(dis[y]==dis[x]+1)
 63         {
 64             int a=ffind(y,mymin(flow-now,t[i].f));
 65             t[i].f-=a;
 66             t[t[i].o].f+=a;
 67             now+=a;
 68         }
 69         if(now==flow) break;
 70     }
 71     if(now==0) dis[x]=-1;
 72     return now;
 73 }
 74 
 75 void output()
 76 {
 77     for(int i=1;i<=len;i+=2)
 78      printf("%d->%d %d\n",t[i].x,t[i].y,t[i].f);
 79 }
 80 
 81 int max_flow()
 82 {
 83     int ans=0;
 84     while(bfs())
 85     {
 86         ans+=ffind(st,INF);
 87     }
 88     return ans;
 89 }
 90 
 91 int op[Maxn][Maxn];
 92 
 93 int main()
 94 {
 95     int k,n,m=0;
 96     scanf("%d%d",&k,&n);
 97     st=n+k+1;ed=st+1;
 98     len=0;
 99     memset(first,0,sizeof(first));
100     for(int i=1;i<=k;i++)
101     {
102         int x;
103         scanf("%d",&x);
104         m+=x;
105         ins(n+i,ed,x);
106     }
107     for(int i=1;i<=n;i++)
108     {
109         int x;
110         scanf("%d",&x);
111         ins(st,i,1);
112         while(x--)
113         {
114             int y;
115             scanf("%d",&y);
116             ins(i,y+n,1);
117         }
118     }
119     int now=max_flow();
120     if(now<m) printf("No Solution!\n");
121     else
122     {
123         for(int i=1;i<=k;i++) op[i][0]=0;
124         for(int i=1;i<=len;i+=2) if(t[i].x!=st&&t[i].y!=ed&&t[i].f==0)
125         {
126             op[t[i].y-n][++op[t[i].y-n][0]]=t[i].x;
127         }
128         for(int i=1;i<=k;i++)
129         {
130             printf("%d: ",i);
131          for(int j=1;j<=op[i][0];j++)
132             printf("%d ",op[i][j]);printf("\n");
133         }
134     }
135     return 0;
136 }
View Code

 

没special judge 测不了 哭泣。。

 

2016-11-04 14:53:36

转载于:https://www.cnblogs.com/Konjakmoyu/p/6030278.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429887.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

参数等效模型可以用于_干货分享电池单体产热特性及热模型标定分析(2)

上篇已讲解了电池单体产热特性及电池模型相关理论&#xff0c;相较之下等效电路模型无需对电池内部的电化学反应有着深入的分析&#xff0c;是通过电路来描述电池的开路电压、内阻等&#xff0c;以实现对电池外特性的表征。本篇将继续讨论此问题&#xff0c;用Matlab和Amesim模…

检测同心圆_(二)光线如何被眼睛检测到?

在第一篇文章中&#xff08;链接&#xff1a;&#xff08;一&#xff09;视觉系统的全貌&#xff09;&#xff0c;我们已经了解了视觉信息被大脑处理的全过程。现在&#xff0c;我们把目光投向一切的起点——眼睛。实际上&#xff0c;人们提起“视觉”&#xff0c;首先想到的几…

matlab计算斜方差_计算一幅图像的信噪比

本文摘自本人的毕业设计《数字图像滤波算法研究》2019, Chang’an University, Xi’an, China.本文适用于原始图像&#xff08;即不含噪声的图像&#xff09;存在的情况下。使用待计算SNR图像&#xff08;记为A&#xff09;与原始图像&#xff08;记为B&#xff09;做相减运算&…

【转载】linux进程及进程控制

Linux进程控制 程序是一组可执行的静态指令集&#xff0c;而进程(process)是一个执行中的程序实例。利用分时技术&#xff0c;在Linux操作系统上同时可以运行多个进程。分时技术的基本原理是把CPU的运行时间划分成一个个规定长度的时间片&#xff0c;让每个进程在一个时间片内运…

区分大小屏幕_VESA持续推动DisplayHDR认证计划,你的屏幕属于何种等级吗?

美国视频电子标准协会(VESA)今年可说是动作频频&#xff0c;年初先发布了专为OLED与其他自发光显示器所制订的DisplayHDR True Black高动态范围标准&#xff0c;下半年则更新DisplayHDR兼容测试规范至1.1版&#xff0c;并发布新的DisplayHDR 1400性能分级&#xff0c;至于年中所…

cordova 某个页面强制横屏_小白科普:从输入网址到最后浏览器呈现页面内容,中间发生了什么?...

老刘 1前言这篇文章是应网友之邀所写&#xff0c;主要描述一下我们访问网站时&#xff0c; 从输入网址到最后浏览器呈现内容&#xff0c;中间发生了什么。今天的文章主要专注于应用层&#xff0c;我拿了一个很简单的网络结构来讲。假定本机已经获取了IP地址&#xff0c;各种网络…

vue调用手机相机相册_今天才发现,点一下小米手机相册,能将照片一键制作成电影...

随着国产手机的发展&#xff0c;手机像素越来越高&#xff0c;里面的功能也越来越丰富&#xff0c;手机拍照成了不少人的日常&#xff0c;如果你很爱拍照&#xff0c;手机里有一大堆照片&#xff0c;那么教你用手机自带的相册功能&#xff0c;一键将照片制作成电影&#xff0c;…

unity 烘焙参数 设置_Unity通用渲染管线(URP)系列(九)——点光源和聚光灯

200篇教程总入口&#xff0c;欢迎收藏&#xff1a;放牛的星星&#xff1a;[教程汇总持续更新]Unity从入门到入坟——收藏这一篇就够了​zhuanlan.zhihu.com本文重点内容&#xff1a;1、支持更多类型的灯光2、包含实时的点光源和聚光灯3、为点光源和聚光灯烘焙阴影4、每个物体限…

c#日期转换周几_Java时间与日期

只有把眼前的事情做好&#xff0c;才能考虑其他的问题。众所周知&#xff0c;全世界在同一时刻看手表肯定不会看到同一个时间&#xff0c;因为地球是圆的&#xff0c;面对太阳的角度是不一样的&#xff0c;我们一般说时间几点几点&#xff0c;是指的本地时间&#xff0c;比如国…

Python开发之--前端 HTML基础

一&#xff1a;HTML介绍 HTML&#xff1a;超文本标记语言&#xff0c;标准通用标记语言下的一个应用。包括“头”部分&#xff08;英语&#xff1a;Head&#xff09;、和“主体”部分&#xff08;英语&#xff1a;Body&#xff09;&#xff0c;其中“头”部提供关于网页的信息&…

给与用户建立dblink的权限_网络安全 之 NTFS安全权限

NTFS安全权限一、NTFS权限概述1、通过设置NTFS权限&#xff0c;实现不同的用户访问不同的权限2、分配了正确的访问权限后&#xff0c;用户才能访问其资源3、设置权限防止资源被篡改、删除二、文件系统概述 文件系统即在外部存储设备上组织文件的方法常用的文件系统&#xff1a;…

TCP 连接中的TIME_WAIT

原文&#xff1a;http://blog.csdn.net/wangpengqi/article/details/17245349 这就有个细节&#xff0c;一次http请求&#xff0c;谁会先断开TCP连接&#xff1f;什么情况下客户端先断&#xff0c;什么情况下服务端先断&#xff1f; 百度后&#xff0c;找到原因&#xff0c;主要…

丁丁打折网卷能用吗_微信群控还能用吗?现在什么群控还能使用吗?

微信群控系统还能用吗&#xff1f;为什么现在微信群控系统越来越被限制了呢&#xff1f;其实&#xff0c;微信群控我想在生活中占据着很大的位置&#xff01;因为微信这么多的使用&#xff0c;现在微信使用人数都是几十亿了&#xff0c;所以很多人看重微信群控系统的市场&#…

错题整理

1.JAVA语言的下面几种数组复制方法中&#xff0c;哪个效率最高&#xff1f; A for循环逐一复制 B System.arraycopy C System.copyof D 使用clone方法 答案&#xff1a;B A、for循环的话&#xff0c;很灵活&#xff0c;但是代码不够简洁. for循环为什么慢&#xff0c;java中所…

xpath中两个冒号_爬虫学习(5)—XPath

之前我们写了一个简单的爬虫&#xff0c;在提取页面信息时我们使用正则表达式来匹配内容&#xff0c;但是正则表达式的书写比较繁琐&#xff0c;而且一旦错误就可能导致匹配失败。对于网页的节点来说&#xff0c;它可以定义id&#xff0c;class或其他的属性&#xff0c;而且节点…

canny算法的实现(android加载图片,数组写入文件换行)

Canny边缘检测首先要对图像进行高斯去噪&#xff0c;前面讲到了高斯去噪处理&#xff0c;这里从对图像灰度进行微分运算讲起吧。微分运算常用的方法是利用模板算子&#xff0c;把模板中心对应到图像的每一个像素位置&#xff0c;然后按照模板对应的公式对中心像素和它周围的像素…

【VirtualBox】VirtualBox的桥接网络模式,为啥网络不稳定?

网桥模式访问外网非常慢&#xff0c;经常卡死&#xff0c;ping时断时续 七搞八搞&#xff0c;反复重启了几次 TMD 就好了&#xff0c;也不知道什么情况&#xff0c;VirtualBox还是不太好使啊。。。。。 网桥模式 设置 如下&#xff1a; 参考资料&#xff1a; http://blog.csdn…

白盒基本路径发测试实验报告_软件生命周期、白盒测试、黑盒测试

继上一讲&#xff1a;隅巳毕月&#xff1a;达摩克里斯之——排序与查找技术​zhuanlan.zhihu.com我们今天来讲一下软件周期与两种软件测试方法软件开发应遵循一个软件的生命周期&#xff0c;通常把软件产品从提出、实现、使用、维护到停止使用、退役的过程称为软件生命周期。软…

Windows7睡眠后自动唤醒

笔者的电脑&#xff08;Windows7 64位旗舰版&#xff09;睡眠后&#xff0c;隔段时间后会自动唤醒。经两项配置后&#xff0c;解决了该问题。 1 禁用唤醒定时器 控制面板里进入"电源选项""更改计划设置"界面&#xff0c;如下图所示 单击上图的"更改高…

bootstrap 两个轮播图冲突_为什么使用bootstrap在一个页面同时做两个轮播效果时,只有第一个有效??...

我们都知道使用bootstrap做轮播效果非常快&#xff0c;但是有时候一个页面会需要两个轮播&#xff1b;但这个时候再次使用bootstrap做轮播效果时就会失效&#xff1b;原因在于bootstrap的Carousel问题&#xff0c;只要修改一下id&#xff0c;就好了~~这是第一个轮播&#xff1a…