EK算法应用,构图(POJ1149)

题目链接:http://poj.org/problem?id=1149

 

题意中有一点要注意,否则构图就会有问题,每个顾客走后,被打开过的那些猪圈中的猪都可以被任意的调换到其他开着的猪圈中。

 

这里的构图不是单一的相邻,以及容量了,区别在于:他还要求这个容量,和连线。

 

这里的构图是,以顾客为节点,源点s,汇点t,源点到顾客的容量是:顾客所能得到的猪的和cap[s][i] += h[tmp];

但是,要是这里有一点要注意的是,顾客与顾客之间的容量,为无穷大,因为上一个顾客有多少,就能够给相邻顾客多少,这里,什么是相邻的顾客?

就是说,有公共钥匙的人啦!

 

老实说,这个构图,我一开始没有想到,也是借鉴了别人的哦,再加上了自己的理解。

 

 

#include <stdio.h>
#include <cstring>
#include <queue>
#include <algorithm>using namespace std;const int INF = 0x1f1f1f1f;
const int MAXN = 110;int cap[MAXN][MAXN];int EK(int s, int t) {queue<int> q;int flow[MAXN][MAXN];int pre[MAXN];int node[MAXN];int maxflow=0;int u,v;memset(flow, 0, sizeof(flow));while(true) {memset(node, 0, sizeof(node));node[s] = INF;q.push(s);while(!q.empty()) {u = q.front();q.pop();for(v = 0; v <= t; ++v)if(!node[v] && cap[u][v] > flow[u][v]) {q.push(v);node[v] = min(node[u],cap[u][v]-flow[u][v]);pre[v] = u;}}if(node[t] == 0) break;for(int u = t; u != s; u = pre[u]) {flow[pre[u]][u] += node[t];flow[u][pre[u]] -= node[t];}maxflow += node[t];}return maxflow;
}int main() {int i, j;int nn, mm;int tmp, m;int s, t;int h[1010];        ///猪的头数int last[1010];     ///记录猪圈上一个拥有钥匙的人while(scanf("%d %d", &mm, &nn) != EOF) {memset(cap,0,sizeof(cap));memset(last,0,sizeof(last));s = 0, t = nn+1;for(i = 1; i <= mm; ++i)scanf("%d", &h[i]);     for(i = 1; i <= nn; ++i) {      ///客户数scanf("%d", &m);            ///有几片钥匙for(j = 0; j < m; ++j) {scanf("%d", &tmp);if(last[tmp] == 0)cap[s][i] += h[tmp];elsecap[last[tmp]][i] = INF;    ///客户到客户last[tmp] = i;}scanf("%d", &cap[i][t]);        ///客户到汇点
        }printf("%d\n",EK(s, t));}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/5510100.html

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

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

相关文章

平台代码检查工具:sonarLint+sonarqube安装教程

加强对代码质量的管控要求&#xff0c;不允许新增代码部分出现严重、重要、主要等sonar扫描问题。 大家按以下文档安装开发工具对应的代码检测插件&#xff0c;请大家务必重视、执行.这里只介绍前端开发VSCode,后端开发Eclipse,两种代表性的编译器安装sonarLintsonarqube方法,其…

程序员通过CSDN如何获取收益

大家好,我是孙叫兽 ,本期内容给大家分享如何使用CSDN一边学习,一遍赚取收益,这样学习的时候也会产生动力. 废话不多说,直接看近7天收益. 博主如何赚取收益 对于博主这些创作者来说,收益主要有付费专栏,VIP文章收益,活动收益,红包收益,问答收益,打赏收益,付费资源收益,下载VIP分…

《Windows驱动开发技术详解》之编程加载NT式驱动

之前我们加载驱动都是利用INSTDRV这个应用&#xff0c;其原理是在注册表中写入相应的字段&#xff0c;这一节我们手动编写代码去加载驱动&#xff0c;其原理类似&#xff1a; 设备驱动程序的动态加载主要由服务控制管理程序&#xff08;Service Control Manager,SCM&#xff09…

程序员如何快速成长为IT精英

很多程序员工作了很多年,仍然只学到了皮毛点的业务和技术,技术长时间没有提升,一直拖拖拉拉处于某个水平,没有接触到核心业务,也难于成为公司的中流砥柱和骨干。那么程序员该如何成长呢? 1.主动学习 时刻保持危机感,对知识保持好奇心,完善自己的职业规划和知识体系,掌…

JavaFX实际应用程序:AISO HRC-Matic

“ Real-World JavaFX Apps”系列中的第三个应用程序是一种重型数据输入应用程序&#xff0c;由称为HRC-Matic的关系数据库支持。 它是由AISO在日内瓦开发的。 AISO是一家专门开发基于JavaFX的业务应用程序的公司。 他们还在研究我在本系列的第一个博客&#xff08; 欧洲广播联…

Feather包实现数据框快速读写,你值得拥有

什么是Feather&#xff1f; Feature是一种文件格式&#xff0c;支持R语言和Python的交互式存储&#xff0c;速度更快。目前支持R语言的data.frame和Python pandas 的DataFrame。 Feather收到了Apache arrow 项目的支持&#xff0c;Apache Arrow是Apache基金会下一个全新的开源项…

一文教你学会需求分析与管理

大家好,我是孙叫兽,本期给大家分享需求分析与管理,在项目开始或者需求整理时,这方面的知识显得尤为重要,常言道:良好的开始是成功的一半! 1.需求的定义 产品需求是在一定的时期,一定的场景中,无论是心理上还是生理上的,用户有着某种“需要”,这种“需要”用户自己不…

java 编写代码_Java 7:如何编写非常快速的Java代码

java 编写代码当我第一次写此博客时&#xff0c;我的目的是向您介绍ThreadLocalRandom类&#xff0c;它是Java 7中新增的用于生成随机数的类。 我在一系列微基准测试中分析了ThreadLocalRandom的性能&#xff0c;以了解其在单线程环境中的性能。 结果相对令人惊讶&#xff1a;尽…

POJ 1172 DFS

&#xff08;感谢wzc学长的幻灯片&#xff09; 单组数据 注意从必经点能到标记过的点则此点不是分裂点。 //By: Sirius_Ren #include <cstdio> #include <queue> #include <cstring> using namespace std; int tot1,first[51],cnt,v[101],nxt[101],n,vis[51…

远程桌面在自己电脑显示很小的解决办法

背景:最近在某银行办公,使用的是云桌面,疫情期间有一周是在加班办公,使用自己的电脑登录云桌面,然后电脑屏幕显示云桌面很小,看文档及代码十分难受。问问同事,这个问题终于得到了解决。 显示如下: 这个云桌面在我电脑就显示2/3宽度的大小,看代码太难受了,排除右上角向…

《JavaScript100例|01》之javaScript实现俄罗斯方块,唤起了女朋友儿时的回忆!

导读&#xff1a;小时候我们经常打游戏玩俄罗斯方块&#xff0c;用的是游戏机。 现在我们学会了敲代码&#xff0c;简单用JS实现一下这个游戏把。 目录 先看效果 操作说明 代码实现 完整代码 先看效果 操作说明 打开编译器&#xff0c;讲代码复制进去&#xff0c;在浏览…

adf4351使用_ADF:将UI类别与动态表单一起使用

adf4351使用JDev 11g R2具有有趣的新功能“ UI类别”。 它使我们可以在视图对象定义级别上以声明方式对VO的属性进行分组。 例如&#xff0c;我的VEmployees视图对象的“ UI Categories”选项卡如下所示&#xff1a; 默认情况下&#xff0c;每个视图对象都有一个预定义的类别“…

使用JavaScript将小写金额转化为大写金额的两种常见方法

导读:在一些支付或者银行确认信息中经常需要将小写金额转换为大写金额,这里做一下归纳, 目录 效果图: 方法一:使用正则表达式 方法二:常规JavaScript实现 效果图: 前面小写,后面大写,这里使用vue测试,其它框架同理.小写是传值的字段money,大写直接调用函数dealBigMoney(money…

h5-列表

<header> <!-- a,div,header,span {-webkit-tap-highlight-color: rgba(255, 255, 255, 0); /*修改a、input和button点击时的蓝色外边框和灰色半透明背景*/ } --><div class"header"> <!-- .header {height: 44px;background: #ff8200;position…

什么是突变测试?

最近&#xff0c;我反复提到“ 突变测试 ”一词。 因为可以说这种方法能够以超出代码覆盖范围的方式检测测试安全网的空白&#xff0c;所以我花了一些时间来追赶这个话题&#xff0c;然后尝试一下。 这篇文章总结了我的发现&#xff0c;作为对该主题的快速介绍。 什么是变异测…

JavaScript数组常用的方法总结

导读&#xff1a;在实际开发中&#xff0c;前端工程师除了写页面布局及样式还要对后端返回的数据进行处理&#xff0c;返回的数据大多数是json格式&#xff0c;一般都是返回一个对象或者数组&#xff0c;下面对常用的数组的使用方法进行总结&#xff0c;方便在开发中手到擒来&a…

Python黑魔法,一行实现并行化

Python 在程序并行化方面多少有些声名狼藉。撇开技术上的问题&#xff0c;例如线程的实现和 GIL&#xff0c;我觉得错误的教学指导才是主要问题。常见的经典 Python 多线程、多进程教程多显得偏“重”。而且往往隔靴搔痒&#xff0c;没有深入探讨日常工作中最有用的内容。 传统…

2. python 参数个数可变的函数

如果想要定义一个参数个数不确定的函数&#xff0c; 可以通过*args,**kwargs实现&#xff1a; *args的使用&#xff1a; **kwargs的使用&#xff1a; 二者的混合使用&#xff1a; 另外还有一些关于调用函数时候的时候常用的技巧&#xff1a; 其和是等价的。 其和是等价的 当然也…

JavaScript常用工具类整理(总结版)

导读&#xff1a;在前端开发过程中需要对常用的功能模块进行封装&#xff0c;常用的方法多次调用需要整合&#xff0c;保证组件的复用性与程序的可维护性&#xff0c;这里总结一下&#xff0c;便于后续的使用&#xff01; 目录 1.全局声明工具类 2.定时器 3.判断变量是否是一…

axis2 json_带有Java和Axis2的JSON Web服务

axis2 json我最近遇到一位客户&#xff0c;要求我使用Java Web服务重建其旧产品。 他们希望它模块化并且易于使用。 我想到的第一件事是使用宁静的方法。 但是让我烦恼的是&#xff0c;Java宁静的方法是使用XML !&#xff0c;我更喜欢一种更简单的通信方式&#xff0c;易于理解…