首页 > 其他分享 >20241015 最短路与生成树

20241015 最短路与生成树

时间:2024-11-08 15:32:05浏览次数:1  
标签:dots 20241015 le 短路 生成 权值 边权 dis

20241015 最短路与生成树

@. The army of Thutmose III

题号是 @,原因是过了之后才发现测不了被删了。

注意到问题形如最大值最小,直接上二分答案。考虑如何 check。设当前 check 的答案为 \(x\)。

容易获得一个猜想,点一定放在区间端点上。那么将区间端点离散化。记 \(a_i\) 表示第 \(i\) 个位置放了 \(0/1\) 个点。

对 \(a\) 作前缀和获得 \(s\),那么分析 \(s\) 具有什么性质。容易发现:

\[\begin{cases} s_i\ge 0&\\ 0\le s_i-s_{i-1}\le 1&\\ \forall 1\le l_i,r_i,s_{r_i}-s_{l_i-1}\le x \end{cases} \]

容易发现这些性质符合差分约束的形式,直接 spfa 判断,最后对求出的 \(s\) 作一遍差分就能知道在哪些位置放点。

A. 矩阵游戏

容易发现,只要确定了某一行和某一列就能推出整个矩阵。不妨设第 \(n\) 行和第 \(m\) 列为 \(0\),推出一个初始的 \(a\)。

但是题目要求 \(0\le a_{i,j}\le 10^6\),那么直接这么构造可能会超出这个范围,那么考虑对 \(a\) 进行一些什么样的操作可以使得 \(b\) 不变。可以看出,对于某一行,我们让奇数位的数字同时加上一个 \(x\),偶数位的数字同时减去 \(x\),这样得到的 \(b\) 矩阵就与原来相同,列同理。那么我们设对第 \(i\) 行进行了 \(x=r_i\) 的操作,第 \(j\) 列进行了 \(x=c_j\) 的操作,操作后的矩阵就是:

\[\begin{bmatrix} a_{1,1}+r_1+c_1 & a_{1,2}-r_1+c_2 & a_{1,3}+r_1+c_3 & \dots &\\ a_{2,1}+r_2-c_1 & a_{2,2}-r_2-c_2 & a_{2,3}+r_2-c_3 & \dots &\\ a_{3,1}+r_3+c_1 & a_{3,2}-r_3+c_2 & a_{3,3}+r_3+c_3 & \dots &\\ \dots & \dots & \dots & \dots \end{bmatrix} \]

这个形式看上去很接近差分约束,但还需要转化。将奇数行的 \(r_i\) 取相反数,偶数列的 \(c_j\) 取相反数,得到:

\[\begin{bmatrix} a_{1,1}-r_1+c_1 & a_{1,2}+r_1-c_2 & a_{1,3}-r_1+c_3 & \dots &\\ a_{2,1}+r_2-c_1 & a_{2,2}-r_2+c_2 & a_{2,3}+r_2-c_3 & \dots &\\ a_{3,1}-r_3+c_1 & a_{3,2}+r_3-c_2 & a_{3,3}-r_3+c_3 & \dots &\\ \dots & \dots & \dots & \dots \end{bmatrix} \]

这个形式就很漂亮了,可以使用差分约束。因为 \(0\le a_{i,j}+\Delta_{i,j}\le 10^6\),所以 \(-a_{i,j}\le \Delta_{i,j}\le 10^6-a_{i,j}\)。根据这个不等式直接差分约束即可求出合法的 \(r_i\) 和 \(c_j\)。

I. Dynamic Shortest Path

注意到时限有 \(10\) 秒,而 \(q\) 只有 \(2000\),增加边权时即使暴力加也只有 \(10^6\) 的运算量,所以我们可以考虑暴力一点的想法。有一个显然的做法:每次加完边权后直接跑一遍 dijkstra 求出新的最短路,这样是 \(O(qm\log n)\) 的。

这样做常数大一点就过不去了,那么考虑这题有什么特殊的性质。可以发现,如果我们能做到在更新边权后在 \(O(n)\) 时间内更新最短路,复杂度就变成 \(O(qn)\),可以通过。注意到这题每次增加边权时都只增加 \(1\),那么每次从 \(1\) 到某个点的最短路变化量一定不会超过 \(c\)(即变化边权的边的数量)。于是考虑求解最短路的增量。

使用 Johnson 算法的思想,将每条边重新赋权为 \(w_{u,v}+dis_u-dis_v\),其中 \(dis\) 为原本的最短路。

这样,一条路径上所有边的权值和就为 \((\sum w)+dis_s-dis_t\)。当起点 \(s=1\) 时,\(dis_s=0\),那么路径的权值就为 \((\sum w)-dis_t\),也就是新的最短路减去原本的最短路,即最短路的增量。

因为增量的值域不大,所以我们可以用若干个值域上的队列来实现优先队列的功能。具体地说,对每个最短路的值开一个队列,队列中存放最短路增量为这个值的点。枚举小值域向大值域转移即可求出增量并更新最短路,单次时间复杂度 \(O(n+m+c)\)。这题有些卡常,慎用 long long,开 O2、Ofast 即可通过。

K. Kuroni and Antihype

将每个人看作一个点,那么最后就是求一个最大的生成森林。考虑转化成生成树。建立一个权值为 \(0\) 的 \(0\) 号节点,第一种操作就相当于把点与这个点连边。以 \(0\) 为根,现在每条边的权值为深度较浅的点的点权,考虑将最终的答案先加上所有点的点权和,最后在减去点权和,那么由于除了 \(0\) 以外的所有节点均有且仅有一条父边,我们可以考虑将这个点的权值加到这条边上,那么每条边的权值就变成它连接的两个节点的权值和。

经过一系列转化,问题变成:两点之间有边当且仅当 \(a_u\&a_v=0\),边权为 \(a_u+a_v\),求最大生成树。

执行类似 kruskal 算法的过程。注意到边权的值域只有 \(4\times10^5\),那么考虑从大到小枚举边权并考虑连边。注意到当 \(a_u\&a_v=0\) 时,\(a_u+a_v=a_u|a_v\),说明在二进制下 \(a_u,a_v\) 都是边权的子集。根据这个性质,直接枚举边权在二进制下的子集。如果存在这样的点,就应该连边了。对于一种权值的所有点,记录它们是否已被连接到同一连通块中即可。具体可以画图加深理解。时间复杂度 \(O(3^{18}\alpha(n))\)。

标签:dots,20241015,le,短路,生成,权值,边权,dis
From: https://www.cnblogs.com/luyuyang/p/18535175

相关文章

  • AI写作软件,一键生成原创文章效果高
    在信息爆炸的时代,内容创作成为各行各业竞争的关键。然而,对于许多创作者而言,如何在保证质量的同时,提高写作效率,成为一大难题。近日,一款名为AI写作软件的创新工具横空出世,为广大创作者带来了福音。本文将详细介绍这款软件的优势,以及如何帮助创作者解决文章不显示疑似AI生成注......
  • 使用文心快码生成口算题,妈妈再也不用担心我的学习了
     2024年10月NJSD技术盛典暨第十届NJSD软件开发者大会、第八届IAS互联网架构大会在南京召开。百度文心快码总经理臧志分享了《AI原生研发新范式的实践与思考》,探讨了大模型赋能下的研发变革及如何在公司和行业中落地,AI原生研发新范式的内涵和推动经验。......
  • 对比:生成对抗网络(GANs)和变分自编码器(VAEs)
    以下是生成对抗网络(GANs)和变分自编码器(VAEs)的详细介绍、区别、优缺点的对比表:项目生成对抗网络(GANs)变分自编码器(VAEs)定义GANs是一种生成模型,通过训练两个网络:生成器和判别器,生成器生成数据,判别器判断数据真假,从而相互提升。VAEs是一种概率生成模型,通过学习潜在空间的分布,将......
  • 计算机毕业设计 | SpringBoot智慧⾼校学术报告系统 AI写作大模型生成平台(附源码)
    1,项目介绍智慧⾼校学术报告系统是⼀个基于SpringBoot开发的标准JavaWeb项⽬。系统整体⻚⾯设计简约⼤⽓,巧妙融合了⽬前备受瞩⽬的AIGC⽣成式AI技术,选择了阿⾥通⽤千问⼤语⾔模型,以智能⽣成趣味报告标题和润⾊报告内容等⽅式,提升系统的整体品味。系统涵盖了丰富的......
  • 使用AI工具生成代码时的几点注意事项
    你只有将需求的上下文清晰的传递给模型,模型才能给出更合理的代码供你使用,否则给出的只能是片断,功能不完整。将上下文有效地传递给大模型(如ChatGPT或Claude)可以显著提升生成代码的合理性和实用性。以下是一些方法和策略,帮助你更好地提供上下文,从而获得更优质的代码生成结果......
  • 利用FreeSql.Generator自动根据数据库表动态生成实体类
    安装dotnettoolinstall-gFreeSql.Generator示例FreeSql.Generator-Razor1-NameOptions0,0,0,1-NameSpaceLinCms.Core.Entities-DB"MySql,DataSource=127.0.0.1;Port=3306;UserID=root;Password=123456;InitialCatalog=lincms;Charset=utf8;SslMode=none;M......
  • 福禄克DTX,DSX系列内置标准以及生成的测试报告如何解读?
    今日,接到一些朋友的询问?虽然使用了很长一段时间的FLUKEDSX-5000或者DSX-8000,但是对于测试标准和测试生成的报告一知半解,借此咱们一块屡屡清楚。1,经常有的朋友拿到设备后,第一时间就问,咱们福禄克内置的标准的多少?我线的参数(被测的铜缆)达到多少db,才能算过了测试?这些通过一个表......
  • 交叉编译工具链命名规则、以及如何生成交叉编译工具链步骤
    交叉编译工具链的命名规则和生成过程至关重要,因为它直接影响编译过程的可移植性和目标平台的适配性。以下是交叉编译工具链的详细介绍,包括工具链的组成、命名规则、生成工具和使用。1.交叉编译工具链的基本组成交叉编译工具链的主要组成部分包括:Binutils:提供汇编、链......
  • 大语言模型是搜索匹配还是智能生成?
    随着人工智能技术的迅猛发展,尤其是大语言模型(如GPT-3、GPT-4等)的问世,许多人开始讨论这些模型到底是依靠“搜索匹配”还是“智能生成”来回答问题、生成文本。这个问题关系到大语言模型的本质及其应用前景,对AI的认知和使用也有深远影响。在辩论这一话题时,我们可以从以下几个方......
  • Day31--生成空白行
    Day31--生成空白行在当前行上方插入空白行在IDEA中,在当前行上方插入空白行的快捷键是“Ctrl+Alt+Enter”例如,当你正在编辑一个Java类,光标位于某一行代码上,按下这个快捷键,就会在当前行的上方插入一个空白行,方便你添加新的代码。在当前行下方插入空白行快捷键是“Sh......