当前位置: 首页 > news >正文

CodeChef YANSPP 官方题解翻译

使用 DeepSeek 进行翻译。

YANSPP - 题解

题目链接:

竞赛 - 三级组别
竞赛 - 二级组别
竞赛 - 一级组别

难度:

中等-困难

前置知识:

0-1广度优先搜索,全源最短路径,模幂运算

题目描述:

给定一个整数 \(K\) 和一个包含 \(P\) 个节点的图,其中 \(P\) 为质数。对于每个顶点 \(u\),都存在一条从 \(u\)\((K\cdot u+i)\mod P\) 的有向边,边权为 \(i\),其中 \(0\le i\le K-1\)

给定 \(Q\) 次查询,每次询问两个节点间最短路径的长度(若路径存在)。

题目解析:

我们首先处理 \(K\equiv 0\mod P\) 的简单情况。

解法

从节点 \(u\) 出发的边权为 \(i\) 的边指向节点 \((K\cdot u+i\mod P) = (i \mod P)\)(对所有 \(u\) 均成立)。因此,每条指向节点 \(v\) 的边的边权均为 \(v\)(若两个节点间存在多条有向边,仅考虑边权最小的那条)。

由于所有节点对之间均存在有向边(因为 \(K\ge P\)),总是可以从 \(X\) 到达 \(Y\),成本为 \(Y\)。因为所有指向节点 \(Y\) 的边的边权均为 \(Y\),所以从 \(X\)\(Y\) 的最小成本为 \(Y\)

现在我们仅考虑 \(K\not\equiv 0 \mod P\) 的情况。

\(G\) 表示从原图中移除所有权值非零的边后形成的图。我们能在 \(G\) 中发现哪些有趣的性质?

图形直观

下图展示了由初始图构建的 \(G\)(参数为 \(K=8, P=13\))。

我们可以观察到两个有趣的性质:

  • 该图由多个循环分量组成
  • 每个循环分量的长度相同(除了仅包含节点 \(0\) 的分量)

这些观察的证明如下(虽然这些性质的含义可能并不明显,但它们构成了解决方案的关键部分!)

断言:\(G\) 由(可能多个)有向循环子图组成,且每个循环的长度相同(除了仅包含节点 \(0\) 的子图)。

证明

容易推断,在图 \(G\) 中,不存在指向节点 \(0\) 的入边或从节点 \(0\) 出发的出边。

对于所有其他节点 \(u\),从节点 \(u\) 出发的唯一出边指向节点 \((K\cdot u\mod P)\)。因此,\(G\) 中的节点按以下方式链接:

\[u\to (K\cdot u\mod P)\to (K^2\cdot u\mod P)\to \dots \]

由于 \(K\)\(P\) 互质,模幂运算的性质表明上述方程中的值是循环的。显然,循环的长度等于最小的正整数 \(R\),使得:

\[ K^R\cdot u\equiv u\mod P\implies K^R\equiv 1\mod P \]

因此,每个节点 \(u\ (u\ne 0)\) 属于一个长度为 \(R\) 的循环子图。

回顾:\(R\)\(G\) 中循环子图的长度,则 \(K^R\equiv 1\mod P\)


我们回到原图。

断言: 任意两个节点之间的最短路径可以仅通过边权为 \(0\)\(1\) 的边实现。

证明

对于任意边 \(u\to (K\cdot u+i\mod P)\),我们证明可以使用仅包含边权为 \(0\)\(1\) 的路径,以相同的总成本 \(i\) 从节点 \(u\) 到达 \((K\cdot u+i\mod P)\)

考虑一个非负整数数组 \(\{a_1, a_2, \dots, a_i\}\),使得从节点 \(u\) 出发:

  • 经过一次出边(边权为 \(1\)),然后经过 \(a_1\) 次出边(边权为 \(0\)
  • 再经过一次出边(边权为 \(1\)),然后经过 \(a_2\) 次出边(边权为 \(0\)
  • 依此类推(总共进行 \(i\) 次迭代)

此方式行驶的总成本等于 \(i\)。终点节点可由以下方程描述:

\[K^{a_i}(\dots(K^{a_2+1}(K^{a_1+1}(K\cdot u+1)+1)+1)\dots+1)\mod P \]

剩下的工作是找到合适的 \(a_i\),使得我们最终到达节点 \((K\cdot u+i\mod P)\)。可以简单验证,设置 \(a_x=R-1\ (x<i)\)\(a_i=R\) 可使上述方程等于 \(K\cdot u+i\)

因此,任何使用边权为 \(i\) 的边的最短路径都可以被一系列仅包含边权为 \(0\)\(1\) 的边替代,且总成本不变。

现在问题大大简化了,图中需要考虑的边总数减少到 \(2\times P\)。然而,由于节点数量庞大,计算任意两节点间的最短路径仍然不可行。

这时我们利用最初描述的 \(G\) 的性质!

情况 1:

如果 \(G\) 中的循环数量(等于 \(\frac{P-1}{R}\))较小,我们可以将原图中属于 \(G\) 的同一循环子图的所有节点合并为一个节点(因为我们可以仅通过边权为 \(0\) 的边在这些节点之间移动)。

然后,在此压缩图上运行 Floyd-Warshall 算法,以获取任意两个组件之间的最短距离(这可用于查找原图中任意两个节点之间的最短距离)。

\(\frac{P-1}{R} \le 500\) 时,此方法效果良好。该方法的时间复杂度为:

\[O\big(P+\bigg(\frac{P-1}{R}\bigg)^3\big) \]

每个测试用例。

情况 2:

\(G\) 中的循环数量很大时,压缩图(如前一情况所述)仍然有太多节点,无法在时间限制内计算图的全源最短路径(APSP)。显然,我们需要一种不同的方法。

符号说明:\(d(x,y)\) 表示从节点 \(x\)\(y\) 的最短路径长度。

符号说明:\(Z_X\) 表示 \(G\) 中与节点 \(X\) 属于同一循环子图的所有节点的集合。即 \(Z_X=\{K^i\cdot X\mod P\ \forall\ i\in\N\}\)

断言: \(d(X,Y)=\min_{X'\in Z_X} d(0,(Y-X' \mod P))\)

证明

定义 \(f(u, s)\) 为路径的终点节点:

  • 从节点 \(u\) 开始
  • 路径长度等于(二进制)字符串 \(s\) 的长度
  • 路径中第 \(i^{th}\ (1\le i\le |s|)\) 条边的权重为 \(s_i\)
解释

考虑 \(K=8,P=13\) 的图。设 \(u=2,s=1001\)。则路径中访问的节点序列如下:

\[2\to_{1} 4\to_{0} 6\to_{0} 9\to_{1} 8 \]

其中 \(\to_{i}\) 表示权重为 \(i\) 的边。
因此 \(f(u,s)=8\)

我们证明对于任意 \(S\)\(f(X, S)=Y\) 当且仅当 \(f(0,S)=(Y-X'\mod P)\),其中 \(X'\in Z_X\)。证明这一点等价于证明原断言。

这如何证明原断言?

假设上述断言成立。

那么,如果 \(s\) 是某个从 \(X\)\(Y\) 的最短路径的移动序列,它也是一个移动序列,使我们从节点 \(0\) 到达 \((Y-X'\mod P)\)(对于某个 \(X'\))。

由于路径的成本仅取决于 \(s\)(确切地说是 \(s\) 元素的和),上述陈述意味着:

\[d(X,Y)\ge d(0,(Y-X'\mod P)) \]

对于某个 \(X'\in Z_X\)

类似地,该陈述的逆意味着:

\[d(0,Y-X')\ge d(X,Y) \]

对于所有 \(X'\in Z_X\)

结合两个陈述,我们得到:

\[d(X,Y)=\min_{X'\in Z_X} d(0,(Y-X' \mod P)) \]

从而证明了原断言。

容易看出 \(f(u,s)=K^\alpha\cdot u+\beta\mod P\),其中常数 \(\alpha,\beta\) 仅由 \(s\) 决定。因此,

\[f(X,S) = K^\alpha\cdot X+\beta\equiv Y\mod P\\ \implies X'+\beta\equiv Y\mod P\\ \implies \beta\equiv Y-X'\mod P \]

那么,

\[f(0,S)=K^\alpha\cdot 0+\beta = \beta\\ \implies f(0,S) = Y-X'\mod P \]

该断言的逆可以类似证明。

利用这一关键性质,我们可以按以下方式解决问题:

  • 首先,在线性时间内计算从节点 \(0\) 到所有其他节点的最短路径长度
  • 然后,为了找到从 \(X\)\(Y\) 的最短路径长度,通过遍历 \(R\) 个可能的 \(X'\) 值,计算 \(\min_{X'\in Z_X} d(0,(Y-X'\mod P))\)

此方法的时间复杂度(所有查询)为

\[O(P+Q\cdot R) \]

每个测试用例。

解决方案:

题解提供者的解决方案可见此处。

http://www.sczhlp.com/news/43855/

相关文章:

  • 把一个网站挂到网上要怎么做bt磁力库
  • 小程序开发课程seo搜索引擎入门教程
  • 北京网站设计优刻企业软文
  • 未备案网站外包优化网站
  • 网站 二次开发怎么做关键词优化顾问
  • 苹果电脑做网站的步骤怎么做app推广代理
  • 专业风水网站建设股票发行ipo和seo是什么意思
  • 哪个网站做的简历最好长沙百度网站推广公司
  • 网上商城系统论文西安seo黑
  • 建网站免费搜索引擎优化seo方案
  • wordpress 自建页面深圳百度seo公司
  • 自己做的网站怎么植入erp百度端口开户推广
  • 国外的b2b网站或者b2c网站今日新闻联播
  • AI Agent 发展趋势与架构演进
  • 逻辑推理bingo 游玩记录
  • wordpress 评论框 模板谷歌优化
  • 广州增城做网站app推广方案怎么写
  • 外贸网站建设公司青岛网络公司网络推广服务
  • wordpress前台视频上传天津seo培训机构
  • 乐清市腾速网络科技有限公司上海关键词优化按天计费
  • 做爰全过程免费的视频99网站浏览器打开是2345网址导航
  • 网站发送邮件连接怎么做seo服务内容
  • 分类信息网站建设2345网址导航官网下载
  • 中国建设人才网官网登录入口2022企业网站seo方案案例
  • 湘潭网站建设seo81
  • 发布html wordpress首页排名优化公司
  • Acunetix v25.7.0 发布,新增功能简介
  • 记一次 .NET 某放射治疗光学定位软件 卡死分析
  • EXCEL里VLOOKUP函数的用法
  • OpenText Static Application Security Testing (Fortify) 25.3 (macOS, Linux, Windows) - 静态应用安全测试