首页 > 其他分享 >网络流技巧

网络流技巧

时间:2023-11-07 20:12:30浏览次数:23  
标签:技巧 val 增广 边权 网络 最长 模拟 关键点

模拟费用流

费用流模型是一类非常优秀的模型,但是用于解决费用流问题的常规算法大都比较鸡肋,因此在一些特殊的网络上可以使用模拟费用流的思想来解决此类问题。模拟费用流没有固定的模板,只能算一种思想,在这里只能是大致分类一下。

wqs 二分

反悔贪心

模拟费用流

直接模拟增广的过程,即模拟 寻找增广路->累计答案->推流 这一过程。

【某模拟赛题】 给定平面上 \(n\) 个黑点和 \(n\) 个白点,你需要将其两两匹配,使得曼哈顿距离和最大。

暴力的建图费用流是平凡的,可以坐标相同的点压缩。

考虑把曼哈顿距离转化成切比雪夫距离(\((x,y)\to(x+y,x-y)\)),在新的坐标系下两点距离变成了 \(\max(|x_i-x_j|,|y_i-y_j|)\) 容易发现只有四种取值,于是有一种不那么暴力的做法,对四种取值建四个点后跑费用流,建图如下:

image

图中容量全为 \(1\)。为了方便,称 S,T,中转点为关键点,定义 \(val_{p,v}\) 为某个非关键点 \(p\) 到关键点 \(v\) 的边权。

模拟费用流,考虑到一条增广路一定形如 S->黑点->中转点->黑点->中转点……->白点->T,并且容量全为 \(1\),而关键点之间在增广之前的最长路是确定的。这启发我们可以舍弃大量的黑点白点,只维护关键点之间的最长路,大致的算法分为两步:

  1. 求一条最长路
  2. 对最长路进行增广

具体实现上,我们用 \(6\times6\) 个带删堆维护关键点之间的最长路,初始时中转点之间都是不连通的,所以只初始化到 S、T 的最长路即可。

第一步可以暴力建出一个 \(6\times6\) 的完全图,每条边的权值都是两点间的最长路,在这张图上跑出一条从 S 到 T 的最长路即我们要求的增广路。

第二步可以对每一条增广路上的边分情况讨论(因为总长不超过 5)。注意这里的一条“边”实际上相当于原图上两条边(关键点->非关键点->关键点),要维护的东西就是删掉当前的边并加上反向边。

只讨论一半的情况,另一半同理。

  • \(S\to P\to X\):对于所有 \(V\) 删除一条边权为 \(val_{P,V}\) 的边,对于所有 \(V\not=X\),加入一条边权为 \(-val_{P,X}+val_{P,V}\) 的边。
  • \(X\to P \to Y\):对于所有 \(V\not= X\),删掉一条边权为 \(-val_{P,V}+val_{P,X}\) 的边,对于所有 \(V\not= Y\) 加入一条边权为 \(-val_{P,Y}+val_{P,V}\) 的边。

重复这个过程 \(n\) 遍(因为最大流为 \(n\),要找到 \(n\) 组匹配)就能得到答案。

标签:技巧,val,增广,边权,网络,最长,模拟,关键点
From: https://www.cnblogs.com/Lkkaknoi/p/17815614.html

相关文章

  • 数据中心和数据中心网络概念
    什么是数据中心?是指大型机房,企业用来集中处理和存储海量数据的地方。可能是自建或者租用。数据中心的整体建构包含:1.计算系统:大量的服务器设备,进行数据的处理。2.存储系统:不同类型的存储设备,用来存储数据。3.数据中心网络:不同类型的网络设备,包括交换机,路由器,防火墙等,用来连接......
  • Linux-虚拟机配置网络
    第一步:安装完系统之后,在开启系统之前,点击“编辑虚拟机设置”来设置网卡模式。第二步:点击“网络适配器”,选择NAT模式第三步:设置虚拟机中NAT模式的选项,打开VMware,点击“编辑”下的“虚拟网络编辑器”,设置NAT参数及DHCP参数最后重启虚拟机!使用ping命令ping外网ip,测试能否......
  • 必看!玩转Salesforce沙盒的5个实用技巧
    定期刷新沙盒对于尝试最新版本的功能,以及防止在生产组织的环境中缺乏测试而导致开发工作回滚至关重要。为了确保沙盒设置在刷新后顺利进行,需要考虑几个因素。首先,确保有完善的文档化流程。文档应分为Conga、DocuSign、数据(CPQ/计费/高级审批)、用户设置和集成等部分。此外,重要的......
  • Linux网络配置和XShell连接
    一、Linux网络配置1.1开启本地电脑VMnet8本地电脑,右键点击网络->选择"更改适配器选项"->启用VMnet8。1.2Linux配置静态IP1.2.1NAT模式设置1.3开启虚拟机登录root用户打开Vmware虚拟机,并开启Centos7,并登陆root。1.4执行命令设置静态IP①修改网卡配置文件vi/e......
  • 电脑连接外置网卡共享网络
    方法电脑外置网卡网线连接路由器LAN口路由器设置界面设置LAN口的为192.168.137.2,之后通过此可以访问路由器设置界面电视端DNS设置为192.168.137.1或:路由器中的DNS设置为8.8.8.8114.114.114.114......
  • 什么是网络攻击?常见的网络攻击手段有哪些?
    网络安全是指保护计算机系统和网络免受未经授权的访问、使用、泄露、破坏或干扰的一系列措施。而网络攻击是网络安全领域中的一个重要问题,其不仅危害多、影响大,且手段丰富,那么常见的网络攻击手段有哪些?具体请看下文。什么是网络攻击?网络攻击是指针对计算机信息系统、......
  • 神经网络基础篇:关于 python_numpy 向量的说明(A note on python or numpy vectors)
    关于python_numpy向量的说明主要讲Python中的numpy一维数组的特性,以及与行向量或列向量的区别。并说一下在实际应用中的一些小技巧,去避免在coding中由于这些特性而导致的bugPython的特性允许使用广播(broadcasting)功能,这是Python的numpy程序语言库中最灵活的地方。而本人认为......
  • 使用counter64解决通过SNMP获取网络流量数据不准问题
    网络流量实时速率是如何计算的?首先我们要知道网络流量实时带宽是如何计算出来的,我们先拿接口流入流量来举例子。通过SNMP的ifInOctets键值,我们可以获取到接口流入数据量的累计总量。那么如果我们想要计算流入流量的带宽速率,只需要固定一个时间间隔(比如30s),在前后分别获取一次累计......
  • 神经网络基础篇:Python 中的广播(Broadcasting in Python)
    Python中的广播这是一个不同食物(每100g)中不同营养成分的卡路里含量表格,表格为3行4列,列表示不同的食物种类,从左至右依次为苹果,牛肉,鸡蛋,土豆。行表示不同的营养成分,从上到下依次为碳水化合物,蛋白质,脂肪。那么,现在想要计算不同食物中不同营养成分中的卡路里百分比。现在计算苹......
  • 神经网络基础篇:详解向量化逻辑回归(Vectorizing Logistic Regression)
    向量化逻辑回归讨论如何实现逻辑回归的向量化计算。这样就能处理整个数据集,甚至不会用一个明确的for循环就能实现对于整个数据集梯度下降算法的优化首先回顾一下逻辑回归的前向传播步骤。所以,如果有\(m\)个训练样本,然后对第一个样本进行预测,需要这样计算。计算\(z\),正在使......