网络流做题记录-1

news/2025/3/29 1:07:28/文章来源:https://www.cnblogs.com/DycBlog/p/18792741

网络流做题记录-1

LG3288. [SCOI2014] 方伯伯运椰子

首先考虑到最终流量变大一定不优,因此我们最终的流量是不变的。于是我们考虑将压缩看作退流,费用为 \(a-d\);扩容看作增广,费用为 \(b+d\)。于是我们知道我们选出来操作的边一定是形成一些环的,并且此时的 \(X-Y\) 即为所有边权和的相反数 \(-\sum w\)

于是所求变为 \(\max\dfrac{-\sum w}{k}\)。考虑题目求解的形式类似分数规划,因此二分一个答案 \(mid\),假设 \(mid\le \dfrac{-\sum w}{k}\Rightarrow k·mid+\sum w\le 0\),此时答案小了。不难看出,\(k\) 即为选出边的数量,因此我们本质上是想选出一个非正环,利用 SPFA 求解即可。

需要注意初始流量为 \(0\) 的边无法压缩。

LG5458. [BJOI2016] 水晶

首先每一个点的坐标不固定让我们很恼火,不难发现三维坐标同时 \(\pm1\) 后表示的点不变,于是我们可以完成 \((x,y,z)\to(x-z,y-z)\) 的变换,如此在将三维转成二维的同时也固定了坐标,并且此时坐标和\(\bmod 3\) 的结果并没有改变。但值得注意的是此时 \((x,y)\)\((x-1,y),(x+1,y),(x,y-1),(x,y+1),(x-1,y-1),(x+1,y+1)\) 相邻。

接下来考虑如何限制共振。对于 \(a\) 型共振,不难发现三个位置满足坐标和\(\bmod 3\) 的结果分别为 \(0,1,2\),而 \(b\) 型共振有同样的特点,并且我们发现我们总是能从共振中找出一条 \(2\to 0\to 1\) 的路径来遍历每一个共振,于是我们考虑对于每个点拆点后进行形如 \(s\to 2\to 0\to 1\to t\) 的连边。除了自己和自己之间的连边的边权为价值以外,其余的边权均为 \(+\infty\),如此割掉一条边就相当于炸掉了对应的水晶。用总价值减去最小割即可。

注意可能会有重点。

CF1045A. Last chance

考虑用流量表示击毁的飞机数量,那么因为每个飞机只能被击毁一次,因此每架飞机向原点连一条流量为 \(1\) 的边。

接下来考虑武器的连边方式。

  • 对于武器 \(0\),因为 \(\sum k_i\le 10^5\),因此源点向武器连一条流量为 \(1\) 的边,武器向可以攻击的飞机连边即可。
  • 对于武器 \(1\),我们发现直接连边边数会变成 \(O(n^2)\),但我们不难想到线段树优化建图,同理源点向武器连边,武器对应到线段树上连边即可。
  • 对于武器 \(2\),我们先忽略攻击数量必须为 \(0,2\) 这个条件,源点向武器连一条流量为 \(2\) 的边,武器向飞机连边即可。

现在考虑如何统计答案和限制武器 \(2\)。统计答案是简单的,顺着反边跑上去找到一个相连武器即可。对于武器 \(2\) 的限制其实也是简单的,因为最大流跑出来是极大的,如果还有可以协调的飞机的话一定会协调,不能协调说明当前的三架飞机都有对应的武器了,并且由于题目的限制,我们知道不会有飞机的对应武器是类型 \(2\),而其他类型的武器没有限制。于是只要武器 \(2\) 的攻击数量不合法,我们就将另外随便一架飞机的对应武器强制修改即可。

注意跑反边的时候相当于退流,不能走没有流量的边,并且找到对应武器后要及时退出。

AGC031E. Snuke the Phantom Thief

考虑一个很直接的想法是利用限制直接算出每一个坐标区间最多能选多少个宝石,然后对四个方向分别作限制的连边。但显然这是不可行的,因为我们无法限制一条边要么不流要么满流。

考虑进一步转化,对于 \(x\le a\) 的宝石最多选 \(b\) 个的限制,我们可以将其转化成,对于按照 \(x\) 从小到大排序后,排名在 \(b+1\) 以上的宝石的 \(x>a\),其他限制也能做相应转化。于是我们枚举选择多少个宝石,对于位置拆成 \(2k\) 个点,分别表示按 \(x\) 从小到大排序后的位置和按 \(y\) 从小到大排序后的位置。对于每一个位置,我们都能类似的求出其对应宝石的坐标区间范围,更进一步地,我们也能求出来每一个宝石可以在哪些位置。为了表示贡献,我们将宝石也拆点,自己向自己连一条流量为 \(1\),费用为价值的边。接着我们从源点向表示 \(x\) 排序后的位置的点,表示 \(x\) 位置的点向对应宝石,对应宝石向表示 \(y\) 位置的点,表示 \(y\) 位置的点连一条流量为 \(1\),费用为 \(0\) 的边。最后的答案即为最大费用最大流。并且不难证明,即使流量未满,答案也不会更优。

CF1416F. Showing Off

容易想到合法的构造:每一个点都要求沿着自己的后缀一直跳到一个环,因为如果没有跳到环说明最后出界了,这样是不合法的;链的部分要求必须跳到值比自己小的地方,不然自己不可能是正整数。链的部分其实是容易维护的:每一个点在四周随意挑一个比它小的连边即可。现在考虑如何维护环。

考虑到每一个环一定都是偶环,用黑白染色证明即可,并且所有点的权值都相等。那么显然我们只考虑二元环也是可行的,因为一个偶环一定可以拆成多个二元环。那么我们可以考虑黑白染色,源点和黑格子连边,黑格子和与其权值相等的白格子连边,白格子和汇点连流量为 \(1\) 的边,这样一条路径就代表了一个二元环。但考虑如果一个格子四周没有比它权值更小的格子,它必须位于一个环中,而有些格子则不用,我们考虑用上下界去限制这个条件。如果一个格子必须维护环内,则其和源点(或汇点)的连边需要有 \(1\) 的下界,保证其一定需要在环中即可。判断有无方案就是判断有没有可行流,跑一边有源汇上下界可行流即可。统计方案找到所有有权值的反边,它的两个端点在一个二元环中,剩下的点随意找一个比自己小的点连边即可。

CF1383F. Special Edges

注意到这道题的 \(k\) 的范围较小,我们考虑从这里入手。首先不难根据最大流最小割定理将最大流转化成最小割,结合 \(k\) 的范围,不难想象到钦定 \(k\) 条边是否在最小割的集合中,求出剩余的边的最小割后加上当前钦定的集合中的边权即为答案。这样我们只需要预处理出 \(2^k\) 种方案的答案即可。但考虑到单次求解的复杂度依然难以接受,我们考虑每一次不重新建图,而是加边和删边后在上一次的残余网络上继续增广,这样我们的复杂度会优化很多。

接下来考虑如何加边和删边。对于加边来说,我们 \(u\to v\) 连一条边权为 \(+\infty\) 的边即可,因为我们不想要这条边成为最小割,但因为边权上限只有 \(25\),所以使用 \(25\) 也可以。而对于删边来说,不难看出之前的这条边可能有流量,设这个流量为 \(f\),因为这条边一定会成为割,所以图中的这条边应当被删去,不在有贡献,所以我们要将这些流量从贡献里删掉,但这样会剩余一些流量,而我们不能一条一条边的撤回贡献,于是我们用一条边指代这条路径。更具体来说,我们 \(s\to u,v\to t\) 连两条边权为 \(f\) 的边,这样任何从 \(u,v\) 继续增广的路径就可以是看作从原路径上撤销的流量了。

这样写的常数可能会比较大,考虑格雷码相邻两个进制不同的进制位仅有一个不同,于是考虑用格雷码辅助统计,这样我们加边和删边的次数就降到了严格 \(2^k\),常数奇小。并且因为这道题的边权上限很多,所以也许 FF 会比 Dinic 快,自己看着选就行。

CF1662J. Training Camp

考虑如何限制题目中的要求,不妨考虑对于每一行、每一列按照 \(s\to 1,i\to i+1,n\to t\) 的顺序连边,并且将每一个点拆开,割掉对应的点表示选择这个人,那么如果 \(\exist x,y,p_1,p_2,a_{x,p_1}<a_{x,y}<a_{p_2,y}\),我们一定可以从源点走到第 \(y\) 列,接着从第 \(y\) 列走到 \(a_{x,y}\),最后沿着第 \(x\) 行走到汇点,这说明我们选择的人应当形成一个割。并且我们发现我们只能选择 \(n\) 条边,因为如果大于 \(n\) 条不满足每一行每一列只选择一个的条件,而小于 \(n\) 条不可能形成割。

考虑假设我们的 \(n\) 个人全都是 \(1\),那么我们选择 \(1\) 没有代价,选择 \(0\)\(1\) 的代价。如果最后的总和最大那么我们的代价要最小,于是跑一遍最小割即可。然而,我们可能会选择 \(>n\)\(1\),这样我们的最小割为 \(0\),然而这样并不合法,考虑如何限制只能选择 \(n\) 个点,不妨对于每一个人的代价均加上 \(n\),这样选择 \(>n\)\(n\) 一定不如选择 \(\le n\)\(n+1\),最后答案即为 \(n-(\text{mincut}-n^2)\)

CF1835F. Good Graph

根据 Hall 定理,我们可以得知一个二分图是好的当且仅当其存在完美匹配,利用网络流计算即可。接下来考虑如何输出答案。

对于 NO 来说,我们需要找到一个集合 \(S\) 使得 \(|S|>|N(S)|\)。不难看出这个集合应当无法进行完美匹配,那么我们在参量网络中随意挑出一个没有匹配上的数加入集合。然而此时与这个点相连的点可以和它匹配,那么说明已经和这些点匹配的点也应当加入集合。对于这些新加入集合的点我们有同样的问题,因此我们需要不断扩展这个集合,直到无法进行扩展,此时得到的集合即为所求。

对于 YES 来说,我们需要给出一个和原来的图等价的最小的图。首先注意到如果集合 \(S,T\) 都是紧密的,那么集合 \(S\bigcup T\) 也是紧密的。于是我们只需要求出每一个点 \(i\) 所在的最小紧密集合 \(S_i\),则剩下的紧密集合一定是由这些集合 \(\bigcup\) 出来的。接下来考虑如何求解这些集合,考虑和上面相同的做法,对于每一个点,我们加入集合后,与它不匹配的相连的点是多余的,需要用已经和这些点匹配的点进行匹配。对于这些新加入集合的点也有同样的问题,我们依旧扩展这个集合,这到无法进行扩展。我们发现如果将这个过程中相匹配的点缩到一起,那么这本质是一个传递闭包的过程,可以简单做到 \(O(\dfrac{n^3}{w})\)。那么问题转化成求一个闭包相同的最小的图。这是好求的,对于同一个强连通分量,显然新图中这些点组成环最优。缩点后,对于其余的边考虑相互到达的关系,如果一条边 \(x\to y\) 满足 \(x,y\) 可以通过一条其他的路径,也就是多个中转点到达,那么这条边显然是无用的。最后加上已经匹配的 \(n\) 对关系就是新图中的所有边。最后输出即可。

LG5295. [北京省选集训2019] 图的难题

首先说明一个结论:一个图 \(G(V,E)\) 合法当且仅当其的任意一个导出子图 \(G'(V',E')\) 均满足 \(|E'|\le 2|V'|-2\)。下面证明这个结论:

充分性显然,一个合法的图 \(G\) 相当于两个图 \(H_1,H_2\)\(\bigcup\)。对于 \(H_1,H_2\) 来说,因为其不存在环,所以其任意导出子图满足 \(|E'|\le|V'|-1\),则合并后有原图的任意导出子图满足 \(|E'|\le 2|V'|-2\)

下面证必要性,考虑用归纳法证明,对于 \(|V'|=1\) 的导出子图来说,命题显然成立。现在考虑一个大小为 \(|V'|\) 的导出子图,并且已知所有大小 \(<|V'|\) 的子图均有一种合法的染色方案。考虑取出一个度数最小的点 \(u\),设其度数为 \(\text{deg}\),则 \(1\le \text{deg}\le 3\),否则 \(\sum \text{deg}\ge4|V'|\),则 \(|E'|\ge 2|V'|\),不符合条件。

  • \(\text{deg}=1\),设与 \(u\) 相连的点为 \(v\),则在取出点 \(u\) 及其邻边的染色方案基础上,将 \((u,v)\) 染成任意一种颜色即可,不难证明这样的方案一定不存在环。

  • \(\text{deg}=2\),设与 \(u\) 相连的点为 \(v_1,v_2\),则在取出点 \(u\) 及其邻边的染色方案基础上,将 \((u,v_1),(u,v_2)\) 分别染成两种颜色即可,不难证明这样的方案一定不存在环。

  • \(\text{deg}=3\),设与 \(u\) 相连的点为 \(v_1,v_2,v_3\),不难看出去掉点 \(u\) 及其邻边的图满足 \(|E'|<2|V'|-2\),令 \(H_1,H_2,H_3\) 分别为图 \(G\) 取出点 \(u,v_1\)\(u,v_2\)\(u,v_3\) 及其邻边的图。先证明一个引理:

    称满足 \(|E|=2|V|-2\) 的图是满的,则对于两个满的图 \(H_1,H_2\),它们的 \(\bigcup\) 也是满的。

    证明:考虑对于两个图 \(H_3=H_1\bigcup H_2,H_4=H_1\bigcap H_2\),由于 \(H_1+H_2=H_3+H_4\),所以我们看出 \(H_3,H_4\) 均满足 \(|E'|=2|V'|-2\),否则定然存在一个图使得 \(|E'|>2|V'|-2\)。然而两个图都是图 \(G\) 的子图,说明其均满足 \(|E'|\le2|V'|-2\),矛盾。

    现在我们看出来 \(H_1,H_2,H_3\) 至少有一个图是不满的,否则我们看出来 \(H_1\bigcup H_2\bigcup H_3\) 就是图 \(G\) 单独去掉点 \(u\) 及其邻边的图,然而该图满足 \(|E'|<2|V'|-2\),矛盾。不妨假设 \(H_1\) 不满,则其加入边 \((v_2,v_3)\) 后依然存在合法的染色方案。于是我们考虑将取出点 \(u\) 及其邻边的图加上一条边 \((v_2,v_3)\),则我们也有合法的染色方案,将 \((u,v_2),(u,v_3)\) 染成与其相同的颜色,\((u,v_1)\) 染成与其相反的颜色,则在原图中这个染色方案合法。

于是我们证明了该结论,接下来考虑如何求解。

不难看出,合法的图应当满足 \(\max\{|E'|-2|V'|\}\le -2\),于是我们将边视作点,边权为 \(1\),点权为 \(-2\),找到一个权最大的导出子图即可。考虑到为了满足导出子图的性质,我们选择一条边应当选择其对应的两个端点,因此从边向点连边即可,注意到如果有两个端点均选择却为被选择的边,则当前答案一定不优,因此直接跑一遍最大权闭合子图即可。然而注意到这个图不能为空,否则我们会发现空图一定不满足这个限制,于是我们可以每一次强制选择一个点,保证图一定不为空即可。直接跑复杂度较大,但可以通过。考虑接着优化,不难发现每一次交换强制选择的点只会删除一条边和加入一条边用退流的方法即可做到单次 \(O(nm)\)

LG8291. [省选联考 2022] 学术社区

考虑一种建边方式: \(x\to y\) 有表示消息 \(x\) 在消息 \(y\) 楼上对答案的贡献的边权,不难看出这样做边权 \(\in\{0,1,2\}\)。这样一个方案总是对应一条经过所有消息的路径,合法的消息数量就是这条路径的边权和,找到边权和最大的一条路径即可。

考虑满足性质 C 的部分分,这说明不存在边权为 \(2\) 的边。我们可以进行一步转化,考虑将所有边权为 \(0\) 的边去掉,则原来的路径将会断成几段,显然边权和越大,原来边权为 \(0\) 的边越少,断成的路径也越少。因此对于新图我们跑一遍最小不交路径覆盖即可,也就是跑一边最大匹配,将匹配对应成链输出即可。然而考虑到这样的匹配可能出现环,则我们无法正常输出。然而注意到题目给出了因为学术社区会禁言在社区中只灌水不学术的人,所以在小 I 给出的帖子里,每一个在帖子中发过言的人都一定会在帖子中发出至少一条学术消息的条件,因此我们可以考虑利用这一点来消环。首先成环的信息一定是同类型的消息,对于楼下型消息来说,不妨假设其中一条边是 \(x\to y\),则原匹配中定有路径 \(y\to x\),假设 \(x\) 的发起人为 \(A\),且 \(A\) 的一条学术消息 \(a\)\(a\to b\) 的边,则不难看出,我们可以将路径定为 \(a\to y\to x\to b\),则此时我们的边权和不变,并且路径中没有环。楼上型消息可以做相同的讨论。则我们发现第一问的答案就是最大匹配,第二问利用刚才的技巧求出答案链后输出即可。然而这样会连接 \(O(m^2)\) 条边,复杂度是 \(O(\sum m^{2.5})\),不可接受。考虑我们的匹配有很强的相似性,比如楼下型消息可以和所有发起人和其接受人相同的消息匹配,则我们可以利用虚点优化建图,则边数下降至 \(O(m)\),复杂度下降至 \(O(\sum m^{1.5})\),可以通过。

接下来考虑不满足性质 C 如何求解。不难考虑到贪心,先忽略边权为 \(2\) 的边得出一组最优解。此时如果存在消息 \(x,y\) 满足它们之间的连边 \(x\to y\) 的边权为 \(2\),则我们可以通过断掉 \(x\) 与其后继,\(y\) 与其前驱的连边从而贪心的获得这个边权。则此时我们花费最多为 \(2\) 的代价得到的 \(2\) 的贡献,此时一定不劣。于是我们可以直接匹配所有边权为 \(2\) 的消息。然后归类到性质 C 即可,注意在处理中已经有前驱的消息不可以再有前驱,已经有后继的消息也不可以再有后继。

LG2825. [HEOI2016/TJOI2016] 游戏

经典 trick,我们可以将每一行和每一列能够相互影响的段单独编号,则每一个可以放置炸弹的位置都可以表示为 \((x,y)\) 的二元组,表示其所在的行段为 \(x\),列段为 \(y\)。不难看出所有行段相同的点只能选择一个,列段相同的点只能选择一个,并且选择的点要尽可能多。对于每个点连接 \(x\to y\),则这是一个二分图匹配问题,用网络流求解即可。

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

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

相关文章

SpringSecurity5(10-动态权限管理)

Spring Security动态权限管理通过实时更新权限配置,支持按需调整用户权限,实现灵活的访问控制。结合注解、表达式等方式,能够动态加载和检查用户权限,无需重启系统,确保应用在复杂业务场景下的安全性与可扩展性,提升用户体验与管理效率。授权流程SpringSecurity 的授权流…

【2025年企业必备】这款跨网跨域传输软件 支持多达6种传输方式!

在全球化经济的推动下,企业的业务范围不断扩展,跨网跨域的数据传输需求日益增长。无论是跨国企业的内部协作,还是与合作伙伴之间的数据交换,高效、安全、可靠的跨网跨域传输软件已成为企业运营不可或缺的一部分。 传统的文件传输方式,如电子邮件附件、FTP服务器、甚至是物…

2025年-AI工具发展记录

时间:2025-03-06豆包: Kimi: 讯飞星火: 通义千问: DeepSeek: 总结:截止2025年3月6号,各类AI工具相较于2024年最大的变化时,都新增了自家的推理功能!这可以说是新年的一次重大更新!

模型的泛化性能度量:方法、比较与实现

在机器学习领域,模型的泛化性能度量是评估模型在未知数据上表现的关键环节。 通过合理的性能度量,不仅能了解模型的优劣,还能为模型的优化和选择提供科学依据。 本文将深入探讨泛化性能度量的重要性、各种度量方法、它们之间的区别与适用场景,并通过scikit-learn代码示例来…

掌握设计模式--访问者模式

访问者模式(Visitor Pattern) 访问者模式(Visitor Pattern)是一种行为设计模式,它允许你将操作(方法)封装到另一个类中,使得你可以在不修改现有类的情况下,向其添加新的操作。 核心思想是将数据结构和对数据的操作分离,通过访问者对象来对数据进行操作,而不是将操作…

双向广搜-BiDirectional BFS

双向广搜 文章目录 前言前言 复习acwing算法提高课的内容,本篇为讲解算法:双向广搜 一、双向广搜 双向广搜其实就是两个bfs,我们知道bfs是一种暴力的做题方法,搜索树长下图所示:我们会发现搜索树越来越宽,每一层的搜索量增加,如果数据范围很大的话,显然是会TLE的,那么…

读DAMA数据管理知识体系指南31参考数据和主数据概念(上)

读DAMA数据管理知识体系指南31参考数据和主数据概念(上)1. 业务驱动因素 1.1. 满足组织数据需求1.1.1. 组织中的多个业务领域需要访问相同的数据集,并且他们都相信这些数据集是完整的、最新的、一致的1.2. 管理数据质量1.2.1. 数据的不一致、质量问题和差异均会导致决策错误…

生成式 AI 和 LLM 简介 起源 历史记录

领域 年份 定义人工智能 (AI) 1956 计算机科学领域,旨在创造能够复制或超越人类智能的智能机器。机器学习 (Machine Learning) 1997 人工智能的子集,使机器能够从现有数据中学习并根据这些数据进行决策或预测。深度学习 (Deep Learning) 2012 一种机器学习技术,通过使用多层…

拿到代理对象,如何调用增强方法

步骤1 前面已经创建了MathCal的代理对象了,我们在调用方法时加一个断点这里返回的确实是代理对象,这个对象中保存了详细信息(增强器,原始对象等),我们进入bean.add(2, 10) 中,来到 org.springframework.aop.framework.CglibAopProxy.DynamicAdvisedInterceptor.intercept(…

如何保证消息队列的消息只能被消费一次

如何保证消息队列的消息只能被消费一次,首先先保证消息不会丢失 首先先生产者到消费者到消费者有哪些场景会消息丢失一、问题场景 场景一、生产者发送到消息队列失败 场景二、消息队列接受到消息磁盘化失败 场景三、消费者接受到消息消费失败 二、场景原因,如何解决 1、场景一…

Day22_java方法

Java方法 方法重载 package com.xiang.method;public class Demo02 {public static void main(String[] args) {int max = max(20, 100, 10);System.out.println(max);}// 比大小public static int max(int num1,int num2){int result = 0;if (num1 == num2){System.out.printl…