首页 > 其他分享 >手把手教你建【货币】一题的网络流模型

手把手教你建【货币】一题的网络流模型

时间:2024-09-26 19:24:10浏览次数:7  
标签:一条 增广 手把手 模型 网络 不割 一题 割掉

现在已知如下问题,并告诉你这题可以用网络流来解决,你该怎么做,该怎么建出网络流的模型?

一些前提:

显然可以发现绝不可能走横向向左的边但可能走竖向向上的边(如下图)

那么图其实就是这样的:问从 \(s\) 到 \(t\) 的最小花费

image

如果没有那 \(m\) 条限制,我们直接跑最短路就行了,加上这些限制,发现其实是个网络流模型,考虑如何建出网络流模型。

建模:

我们虚构出以下的模型以方便理解——很典的模型:对偶图!(具体什么是对偶图自行了解)

image

注:没方向的边是现在还不清楚该怎么建,稍后考虑。

每条红边(网络流上的边)的权值就是其交叉的黑边(实际的图)的权值

(好像个灯笼)现在实际上从 s 到 t 的最短花费其实就是 s t 的红色连边构成的图的最小割了。

为什么?我们单独扣出来两个点证明一下:

image

如上图,先不考虑横着的红边的话,根据最小割知识,我们知道在路径 \((s,x) 和 (x,t)\) 中必须要割掉一条且只割掉一条,同样,在 \((s,y) 和 (y, t)\) 中必须要割掉一条且只割掉一条,(必须割一条是为了满足没有增广路可以从 s 到 t );

为什么各只能割掉一条呢?

  • 如果我们保证需要割 \((x,y)\) 这条边,则只会再割 \((s,y),(x,t)\);不然无论是割 \((s,y),(s,x)\) 还是割 \((x,t),(y,t)\) 都会使得没有必要割 \((x,y)\),与保证需要矛盾。
  • 若割 \((y,x)\) 同理;
  • 若既不割 \((x,y)\) 也不割 \((y,x)\):
    • 如果保证需要割掉 \((x,t)\),那么需要割 \((y,t)\) 时不用再割别的边了,这不用解释。那如果我们割 \((s,y)\) 呢,这样仍然有增广路 s->x->y->t,此时因为我们既不割 \((x,y)\) 也不割 \((y,t)\),所以必须割掉 \((s,x)\),此时会发现 \((s,x) 和 (x,y)\) 都割掉了,那么 \((x,t)\) 是没必要割的,矛盾!
    • 不割 \((x,t)\) 的话,同理。

对照实际的图,发现一样,如果走 1->2 这条边,一定不会走 4->5 这条边,走 2->3 一定不会走 5->6;

如果走了 2->5,那么要么是走 1->2->5->6,要么是走 4->5->2->3。

所以其实可以发现最小割就是原图中的最短路

解决了以上问题,那么现在我们只需再解决 \(m\) 个限制条件 和 灯笼图中没有方向的红边(最左边和最右边点的边) 两个问题即可。

如何解决 \(m\) 个限制?

还是扣出两个点,(只扣模型点了),如果题目限制同时走 s->x 和 y->t (x 和 y 并不一定相邻)时,需要再增加大小为 \(c\) 的花费。(现在暂时当作没有虚线边)

image

那么等同于我们需要考虑如何使得在既割 s->x 又割 y->t 的情况下,还需要再多割一条花费为 \(c\) 的边,我们再建一条从 y 到 x ,花费为 \(c\) 的边就解决了。(就是图中虚线边)。

显然割掉 s->x 和 y->t 后,还有一条增广路 s->y->x->t,所以必须再割掉 y->x,(上文已经证明出来此时不会再割 x->t 和 s->y )。ok 了。

对于最左和最右那两个点的处理

现在把最右边那部分边拿出来,显然可以连成这样:

image

可以发现,在 1、2 边之间(显然这两条边只能走一个)如果我们走的是 2,则没什么事;但如果走的是 1 这条边,那么就一定要走 3 这条边。考虑在网络流上怎么解决?

意思就是需要在 a、b 之间选择割 a 这条边的时候,必须要再割掉 e 这条边。

其实把 d 权值附为 0,c 附为 inf,然后 e 从右边那个点连向左边那个即可,这样保证割 d 不割 c,此时若割 a,则还需要割掉 e 以使增广路 c-e-b 不再增广。

如下图:

\[e \]

\[@<--@ \]

标签:一条,增广,手把手,模型,网络,不割,一题,割掉
From: https://www.cnblogs.com/YuenYouth/p/18434115

相关文章

  • 数据结构:实现链式结构二叉树(Tree) 手把手带你入门数据结构~
    文章目录前言一、链式结构二叉树的概念1.定义2.节点结构3.操作4.优势与劣势二、链式结构二叉树的实现1.树结构的定义2.树的遍历(1)前序遍历(2)中序遍历(3)后序遍历3.二叉树结点个数4.二叉树叶子结点个数5.二叉树第k层结点个数6.二叉树的深度/高度7.二叉树查找值为......
  • 如何让智能客服像真人一样对话?容联七陌揭秘:多Agent大模型
    科技云报到原创。经历了多年的“答非所问”、“一问三不知”,很多人已经厌倦了所谓的“智能客服”。哪怕是技术已经非常成熟、可以模拟真人发音的外呼机器人,也会因为“机感”重而被用户迅速挂机或转向人工客服。智能客服似乎遇到了一道坎,在理解用户、和用户对话方面,始终无法实现真正......
  • MiniMax、商汤科技、面壁智能、西湖心辰、声网都来了!RTE 大会「实时互动和大模型」专
       当大模型进化到实时多模态,将诞生什么样的新场景和玩法? VoiceAI实现human-like的最后一步是什么? AI视频爆炸增长,新一代编解码技术将面临何种挑战? 所有AIInfra都在探寻规格和性能的最佳平衡,如何构建高可用的云边端协同架构? AI加持下,空间计算和新......
  • 从“可用”到“好用”,百度智能云如何做大模型的“超级工厂”?
    如果说,过去两三年大模型处于造锤子阶段,那么今年,更多的则是考验钉钉子的能力,面对各类业务场景大模型是否能够有的放矢、一击必中,为千行百业深度赋能。当前市场上,已经有200多把这样的锤子在疯狂找钉子。但从实际应用来看,大模型在文生文、文生图以及扮演初级的工作助理等方面还算合格,......
  • 豆包通用模型Pro:字节跳动的AI革新,引领多模态交互新纪元
    在人工智能技术的快速发展浪潮中,字节跳动凭借其最新的豆包通用模型Pro,再次站在了技术创新的前沿。豆包通用模型Pro不仅在技术上取得了显著的突破,更在实际应用中展现了其强大的多模态交互能力,为内容创作和用户交互提供了全新的解决方案。技术突破:豆包通用模型Pro的核心优势豆包通用......
  • Windows如何本地部署llamafile并运行千问7b大模型无需安装运行环境或依赖库
    文章目录前言1.下载llamafile2.下载大语言模型3.运行大语言模型4.安装Cpolar工具5.配置远程访问地址6.远程访问对话界面7.固定远程访问地址前言本文主要介绍在Windows系统电脑如何利用llamafile结合cpolar内网穿透工具,实现随时随地远程访问本地大语言模型的......
  • 袋鼠云数据资产平台:数据模型标准化建表重构升级
    想要建立一个良好的数据模型,设计时需要优先考虑数据的关系,避免出现数据冗余和不一致的问题,减少数据维护的难度。正是基于这样的需求,袋鼠云数据资产平台中的数据模型提供了一种建表的能力,可以对表名、字段名等信息进行约束,并且支持批量解析模式(根据中文名批量解析字段)与建表语句模式......
  • 深入理解并发原子性、可见性、有序性与JMM内存模型
    1.并发三大特性并发编程Bug的源头:原子性、可见性和有序性问题1.1原子性一个或多个操作,要么全部执行且在执行过程中不被任何因素打断,要么全部不执行。在Java中,对基本数据类型的变量的读取和赋值操作是原子性操作(64位处理器)。不采取任何的原子性保障措施的自增操作并不是......
  • 一个基于Transformer模型的中文问答系统926.1
    这个代码实现了一个基于Transformer模型的中文问答系统。以下是代码的主要功能和可能的完善方向:主要功能数据处理:代码首先定义了处理中文文本的函数,包括分词、构建词汇表、将句子转换为张量等。数据加载:从.jsonl或.json文件中加载问题和答案数据,并进行数据增强。模型定......
  • 如何利用大模型提升前端研发效率和代码质量
     随着人工智能技术的飞速发展,尤其是大模型(LargeLanguageModels,LLM)的崛起,前端开发者迎来了全新的工作方式。大模型不仅可以提升研发效率,还能够显著提高代码质量。本文将深入探讨前端开发者如何利用大模型及其相关工具,提升工作效率和代码质量,并探讨未来可能的应用场景和发展方向......