link

题外话:考场写了个 \(3^3\) 巨大多恶心的分讨倍增写吐了,不仅没调出来还导致没时间仔细考虑 T1 T3 的 bug,感谢这题送我退役。

对于 \(K=1\),相当于树上路径点权和。

对于 \(K=2\),不难想到我们最终走过的 \(c\) 都在 \(s_i \to t_i\) 的树上简单路径上。因为若想走两步规避掉我的父亲,那么我拐到父亲的一个儿子,向上走还是只能到我父亲的父亲,还不如一开始就走到我父亲的父亲(\(\operatorname{LCA}\) 处类似)。

对于 \(K=3\),类似于 \(2\) 的讨论,我们最终的 \(c\) 序列只有可能是原来 \(s_i\to t_i\) 的简单路径中的点或者这些点的邻接点。

那么先预处理 \(a_{x, 0}=v_x, a_{x, 1}=\min_{(x, y)\in T} v_y\)。

设 \(dp_{x, k}\) 为当前处理完 \(s_i \to x\) 部分,现在在距离 \(x\) 为 \(k\) 的某个点上,最小的代价,\(k \in [0, 2]\),现在转移到 \(dp_{nxt}\),我们设 \(f\) 为 \(x\) 处的 \(dp\) 值,\(g\) 为 \(nxt\) 处的 \(dp\) 值。

对于 \(K=2\),有:

\[\begin{cases}
g_0=\min(f_0+a_{nxt, 0}, f_1+a_{nxt, 0})\\
g_1=f_0 \\
g_2=\operatorname{INF}
\end{cases}\]

对于 \(K=3\),有:

\[\begin{cases}
g_0=\min(f_0+a_{nxt, 0}, f_{1}+a_{nxt, 0}, f_2+a_{nxt, 0})\\
g_{1}=\min(f_0, f_{1}+a_{nxt, 1})\\
g_2=f_1
\end{cases}\]

这些递推是比较 trivial 的,大家都能想到,需要考虑一些琐碎的点:

  1. 对于 \(K=2, g_1\) 的转移:根据结论,当前走到点的前一个点必然还是原路径上的点,那么我只能从 \(x\) 走过来。

  2. 为什么要考虑 \(k=2\) 的情况,虽然 \(K=3\) 的情况中非原路径点到路径的最短距离只有 \(1\),但我可能从距离 \(x\) 为 \(2\) 的点走到 \(nxt\),故要多考虑 \(k=2\)。

  3. \(g_2=f_1\) 这一步,如果 \(f_1\) 本身到的点就是 \(nxt\),不会重吗?若最优路径选择了 \(nxt\),那么会在 \(g_0\) 被统计到,若没有,\(g_2\) 没有用处,因为我们只会走到邻接点。

发现转移柿子规模很小,考虑矩阵优化。

重新定义矩阵乘法 \(c[i][j]=\min (a_{i, k}+b_{k, j})\),发现其类似于 Floyed,因此结合律是有的。

不难写出转移矩阵:

\[\left[
\begin{aligned}
f_0 && f_1 && f_2
\end{aligned}
\right]

\times

\left[
\begin{aligned}
a_{nxt, 0} && 0 && \operatorname{INF} \\
a_{nxt, 0} && \operatorname{INF} && \operatorname{INF}\\
\operatorname{INF} && \operatorname{INF} && \operatorname{INF}\\
\end{aligned}
\right]

=

\left[
\begin{aligned}
g_0 && g_1 && g_2
\end{aligned}
\right], (K=2)
\]

\[\left[
\begin{aligned}
f_0 && f_1 && f_2
\end{aligned}
\right]

\times

\left[
\begin{aligned}
a_{nxt, 0} && 0 && \operatorname{INF} \\
a_{nxt, 0} && a_{nxt, 1} && 0\\
a_{nxt, 0} && \operatorname{INF} && \operatorname{INF}\\
\end{aligned}
\right]

=

\left[
\begin{aligned}
g_0 && g_1 && g_2
\end{aligned}
\right], (K=3)
\]

特别的,\(s_i\) 的转移矩阵为:

\[\left[
\begin{aligned}
a_{x, 0} && \operatorname{INF} && \operatorname{INF} \\
\operatorname{INF} && \operatorname{INF} && \operatorname{INF}\\
\operatorname{INF} && \operatorname{INF} && \operatorname{INF}\\
\end{aligned}
\right]
\]

那么直接根据跳的方向(\(s_i \to lca\) 向上,\(lca \to t_i\) 向下) 倍增一下即可,复杂度 \(O(3^3 n \log n)\),注意空间不要开太大。

code

[CSP-S 2022] 数据传输的更多相关文章

  1. CSP/S 2022 游寄

    初赛 HN 初赛分数线好像大 \(32\) 分左右,通过率极高!本人弱弱的拿了 \(60.5\) 分(周围的同学平均分 \(>80\).) Day -1 这一天晚上,我背了背 dijkstra, ...

  2. CSP学习之CryptoAPI初识

    Crypto API目的就是提供开发者在windows下使用PKI的编程接口. Crypto 提供了很多的加解密相关函数,如编码.解码.加密解密,哈希,数字证书.证书管理证书存储等.       有关 ...

  3. CSP初赛复习

    初赛复习 初赛一定要过啊,否则付出的那么多都白搭了! while(1) ++csp.rp,++csp.luck,++csp.scores; 历史 2020年开始,除NOIP以外的NOI系列其他赛事(包 ...

  4. 安全 - 内容安全策略(CSP)(未完)

    威胁 跨站脚本攻击(Cross-site scripting) 跨站脚本攻击Cross-site scripting (XSS)是一种安全漏洞,攻击者可以利用这种漏洞在网站上注入恶意的客户端代码. 攻 ...

  5. CSP 记

    csp 开考建好文件夹编译器不能用搞了半天换了台电脑 四道题看完一个小时过去了 第一题不会正解写了部分分还有点悬 第二题写暴力因为一个小错误调了半天 看时间不多了已经有点慌了 也没想正解直接开了下一题 ...

  6. 程序员面试干货:漫谈计算机网络:数据链路层 ----- 数据链路路在何方? --从点对点数据传输 到 "广泛撒网,重点捕获"的局域网

    面试答不上?计网很枯燥? 听说你学习 计网 每次记了都会忘? 不妨抽时间和我一起多学学它 深入浅出,用你的空闲时间来探索计算机网络的硬核知识! 博主的上篇连载文章<初识图像处理技术> 图像 ...

  7. 【HALF】CSP-S2 2022 游记 - Dawn Eve?

    相册放在 NOIP2022 游记 了 Day -2 周三.折腾了好几天,考场从深圳换到广州最后换到东莞.疫情爆炸... 只是希望自己最后两场比赛不会受到影响. 下午是高二体锻课,结果我们得去做核酸.四 ...

  8. ABP(现代ASP.NET样板开发框架)系列之16、ABP应用层——数据传输对象(DTOs)

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之16.ABP应用层——数据传输对象(DTOs) ABP是“ASP.NET Boilerplate Project ...

  9. 前端学HTTP之数据传输

    × 目录 [1]客户机处理 [2]集线器处理 [3]路由器1处理[4]路由器2处理[5]交换机处理[6]服务器处理[7]反向传输 前面的话 上一篇中,介绍了网络基础.本文将详细介绍客户机在浏览网页ab ...

  10. Android GZIP压缩IO流,优化APP数据传输(一)

    我是小搬运工,今天讲解流的压缩传输 在我们安卓开发中,通常伴随着大量的数据传输,在此,楼主给出一个简单的压缩流的数据进行操作. public void GZIPCpf(String path) { / ...

随机推荐

  1. This APT has Super Cow Powers.

    在Debian/Ubuntu上,apt包管理器内嵌着一个彩蛋. 如果你在命令行界面输入 apt help 在最后一行能找到This APT has Super Cow Powers. 说明该apt具有 ...

  2. Visual Studio 中的 .sln 和 .suo 文件

    解决方案文件1 Visual Studio 采用两种文件类型 .sln & .suo 来存储特定于解决方案的设置.这些文件总称为解决方案文件,为解决方案资源管理器提供显示管理文件的图形接口所需 ...

  3. leetcode每日一题:酿造药水需要的最少总时间

    引言 ​ 今天的每日一题原题是2255. 统计是给定字符串前缀的字符串数目,直接模拟,逐个匹配words中的字符串是否是s的前缀即可.更换成前几天遇到的更有意思的一题来写这个每日一题. 题目 给你两个 ...

  4. Crealens.ai 免费体验GPT-4o 生图+吉卜力风格化

    自己的一张日常照片,能在几秒内变身为一幅充满童话感的吉卜力风插画?90%的人不知道,如今只需一句话,就能在 ChatGPT 里实现"AI 生图"--这就是 GPT-4o 生图功能的 ...

  5. Koin 依赖注入: 在 Android 模块化项目中定义 Room 数据库的最佳实践

    前置 本文发布于个人小站:https://wavky.top/db-in-multi-modules/ 欢迎移步至小站,关注更多技术分享,获得更佳阅读体验 (不保证所有技术文章都会同步发表到博客园) ...

  6. mybatis—— 一个空格引发的血案

    环境描述: 我在使用SSM做项目的时候需要一个需求:一个用户有多个角色,一个角色有多个权限,我需要根据用户的id找到用户的所有角色,及其对应的权限. 数据库是这个样子,users_role表记录了用户 ...

  7. PC端自动化测试实战教程-5-pywinauto 操作PC端应用程序窗口 - 下篇(详细教程)

    1.简介 上一篇宏哥主要讲解和介绍了如何获取PC端应用程序窗口信息和如何连接窗口对其进行操作的常用的几种方法.今天宏哥接着讲解和分享一下窗口的基本操作:最大化.最小化.恢复正常.关闭窗口.获取窗口状态 ...

  8. 智表ZCELL专业版授权说明

    专业版: 1.智表专业版按照部署地址授权,价格1680元.(IP或域名均可,授权时localhost会同步授权) 2.授权版本为智表专业版最新版本,不提供历史版本授权.授权为插件使用权,不提供源码. ...

  9. ASP.NET Core之由配置系统与创建app所想到的

    先看文件配置的代码: ConfigurationBuilder configBuilder=new ConfigurationBuiler();//典型的创建者模式 configBuilder.Add ...

  10. C#交换方法指针

    被引用的dll是testDllFr.dll,其代码为: namespace testDLLFr { public class TestA { public static void TestAM() { ...