题意 有$m$个实验,$n$中器材,每个实验需要使用一些器材 每个实验有收入,每个器材有花费 最大化收入 - 花费 Sol 最大权闭合图的经典应用 从$S$向每个实验连流量为该实验收入的边 从每个器材箱$T$连流量为花费的边 每个实验向其需要其器材连边权为$INF$的边 答案为:总收入 - 最小割 考虑如何统计方案 在最小割中,割去实验表示不选该实验. 那么我们从源点出发,不经过边权为$0$的边,走到的就是需要选的. 这正好是Dinic最后一次增光的deep数组 #include<cstdio>…
https://www.luogu.org/problemnew/show/P4174 最大权闭合子图的模板 每个通讯站建一个点,点权为-Pi:每个用户建一个点,点权为Ci,分别向Ai和Bi对应的点连边:然后就可以跑了 方法是: 建新源S和新汇T,从S向所有正权点连边,容量为点权值:从所有负权点向T连边,容量为点权值的相反数:原图中所有边容量设为无穷大 跑S到T最大流 原因:(网上都有,自己研究的也不知道有没有偏差) 找出图的任意一个割,其中: 显然不可能割掉容量为无穷大的边: 割掉一条S到u的…
题目链接 woc这题目的输入格式和输出格式真的恶心 首先我们就着样例讲一下闭合图 如图所示,第一层是两个实验节点,带来正收益:第二层是三个仪器节点,带来负收益:问讲道理到终点可以获得多大收益. 闭合图是什么呢?闭合图是一个点集,这个点集中所有点的出边所指向的点都必须在闭合图中.我们用点权来表示点的话,比如点集{10,-5,-6,终点}就是个闭合图,然而{10,25}就不是. 然后这题显而易见的叫我们求出最大权闭合图. 于是我们可以把它变成这样一个图: 如图,从源点到每个正点权点连一条容量为点权的…
洛谷 P2762 太空飞行计划问题 P3410 拍照[最大权闭合子图]题解+代码 最大权闭合子图 定义: 如果对于一个点集合,其中任何一个点都不能到达此集合以外的点,这就叫做闭合子图.每个点都有一个权值,那么最大权闭合子图就是权值最大的那个闭合子图. (或者说对于一个点集,这个点集中所有点的出边所指向的点都在此点集中) 求解 超级源点向每个权值为正的点连边,容量为该点权值 每个点权为负的点向超级汇点连边,容量为该点权值相反数 原图中的变,容量为inf 然后跑最小割(最大流) 最后用正点权的总和-…
link:https://www.luogu.org/problemnew/show/P2762 题意 承担实验赚钱,但是要花去对应仪器的费用,仪器可能共用.求最大的收益和对应的选择方案. 思路 这道题读入有点技巧,就是要自己判断换行这道题和费用流关系不大,是最大权闭合子图,源点连接实验,容量为收益,实验向对应的仪器连接容量为inf的边,仪器向汇点连接容量为费用的边.跑出最小割s,即最大流,然后用实验总收益 - s即可.至于如何输出方案,即输出最大权闭合子图中的点.就是跑最后一次bfs的时候,有…
https://www.luogu.org/problemnew/solution/P2762 最小割对应的点,在最后一次更新中dinic的bfs会把他的dep重置掉.所以可以根据这个性质复原最小割. #include<bits/stdc++.h> using namespace std; #define ll long long /* dinic begin */ ; ; const int INF=0x3f3f3f3f; struct Edge{ int to,next,cap,flow;…
最大权闭合子图 胡伯涛论文真是个好东西.jpg 求一个有向图的最大权闭合子图,常应用于有先决条件的最优化问题中 将所有正权点与源点相连,容量为点权; 将所有负权点与汇点相连,容量为点权的相反数; 将原图中的边相连,容量为INF 可以发现,所有正点权之和-最小割即为答案 证明见胡伯涛论文 如何输出该子图 可以发现求出最小割后的残量网络中与s点相连的点即为所求 #include <iostream> #include <cstdio> #include <cstring>…
这题套路好深......没想渠. 题意:给你若干个设备,若干个任务. 每个任务需要若干设备,设备可重复利用. 完成任务有钱,买设备要钱. 问最大总收益(可以什么任务都不做). 解:最大权闭合子图. 对于一个有向图,如果选择了一个点,那么就要选择它的所有后继节点.求最大权值和. 建立s,t,记所有正权值和为sum. s向所有权值为正的点连边,流量为权值. 所有权值为负的点向t连边,流量为权值的绝对值. 对于所有边,建立流量INF的边. 答案即为sum - 最小割. 证明: 你割的边显然只能与s或t…
传送门 我们可以把实验放在左边,仪器放在右边,点有点权,然后连对应的有向边,就是求一个最大权闭合图,可以转化为最小割来做(关于这具体是个啥……可以百度胡伯涛<最小割模型在信息学竞赛中的应用>) 总而言之,就是求一个图,每一个点有点权,闭合图就是若图中有点$u$,且原图中存在边$(u,v)$,那么点$v$也在图中.然后求一个最大权的闭合图即可(具体证明看上面).最大权闭合图可以转化成下面那样建图之后求最小割 源点向所有实验连边,容量为收益,实验向对应仪器连边,容量为$inf$,仪器向汇点连边,容…
--一道难在读入的题. 最后解决方案直接getline一行然后是把读优拆掉放进函数,虽然很丑但是过了. 然后就是裸的最大权闭合子图了,把仪器当成负权点向t连流量为其价格的边,s向实验连流量为实验报酬的边,实验向所有它所需要的仪器连流量为inf的边表示不可割断.然后跑最大流即可. 关于输出方案,直接看dinic最后一次bfs的level数组即可,扫到的就是在方案里的. #include<iostream> #include<cstdio> #include<queue>…