BZOJ 4514 浅谈最大费用最大流

这篇博客介绍了如何利用最大费用最大流解决BZOJ 4514问题,讨论了如何将问题建模为二分图,并通过网络流方法寻找最大配对次数,同时在权值和不低于0的情况下优化匹配次数。文章详细解释了为何选择网络流而非匈牙利算法,并提供了使用多遍SPFA寻找最大费用最长路的解题思路。
摘要由CSDN通过智能技术生成

这里写图片描述
世界真的很大
网络流并不难,但是其建图方式的多种多样,决定了其能解决的问题的多样性。
而作为网络流的一个变种,在其基础之上加上边权的费用流,除了一眼就能看出的模板题以外,取决于建模方式的灵活变化也很多
而对于这样变化多端的题而言,我们往往很难一眼看出来这道题究竟该不该用网络流或者费用流
我们寻求题解,但却不能仅仅止步于AC,不应该忘记去推导建模的过程
在感叹“哇这道题真是巧”的同时,还是得去想想到底为什么能这么想,或者大佬是怎么把这道题想出来的,“怎么”比“什么”更重要
尽管的却很难
网络流费用流一类正是如此
看题先:

description

有 n 种数字,第 i 种数字是 ai、有 bi 个,权值是 ci。
若两个数字 ai、aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数,
那么这两个数字可以配对,并获得 ci×cj 的价值。
一个数字只能参与一次配对,可以不参与配对。
在获得的价值总和不小于 0 的前提下,求最多进行多少次配对。

input

第一行一个整数 n。
第二行 n 个整数 a1、a2、……、an。
第三行 n 个整数 b1、b2、……、bn。
第四行 n 个整数 c1、c2、……、cn。

output

 一行一个数,最多进行多少次配对

看题目,问最多的配对次数
先考虑配对条件,理解一下就是说ai等于aj乘上一个质数
由除法,质数什么的可以联想到质因数什么的,就是说ai质因数分解后质因数比aj多一个,而且恰恰多一个
那么对于所有可以匹配的ai,aj,其质因数个数一定是一个奇数一个偶数,不然没法差1对吧
而且我们可以看出,对于质因数个数同为奇数或者偶数的两个数,那肯定是不可能配对的
很明显的可以把图分成一张二分图了,只有在图的两侧的点能互相连接配对
处理二分图的一般就是匈牙利或者网络流了
继续考虑到底是把数分成二分图,还是把数的种类分成二分图
这里就对题目数据范围逆向分析了
种类的范围是200,数的范围是200*10^5就是10^7级别,不管是对于匈牙利还是网络流都太大了一点,相对来说还是200更为合适
那么就按照种类,把a值质因数个数为奇数的排成一列,偶数的排成一列,相互能配对的互相建边
但是如果不按数的个数来的话,b就没有作用了,换句话说,就需要一个方法来限制每种数的数量,很显然,匈牙利貌似没有这个功能
那么就是网络流了,dinic一类的东西
源点想所有奇数点连流量为b值的边,所有偶数点向汇点连流量为b值的边
确立大概算法之后就带着算法的印象来思考
题目要求的是在权值和大小不低于0的情况下考虑最多的匹配次数
考虑本来已经是按照匹配连边的,所以从源点到汇点的一条最大流就是最大流次匹配。
而我们现在要考虑的是最大流的匹配次数带来的权值,就是匹配次数乘

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值