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. Graph4Stream:基于图的流计算加速

    作者:汪煜 之前在「姊妹篇」<Stream4Graph:动态图上的增量计算>中,向大家介绍了在图计算技术中引入增量计算能力「图+流」,GeaFlow流图计算相比Spark GraphX取得 ...

  2. devops 2024

    What is DevOps? DevOps is a mindset, a culture, and a set of technical practices. It provides commun ...

  3. eolinker响应预处理:传参解决方法(截取返回数据中的某一段数据,正则截取)

    特别注意:需要使用全局变量或者预处理前务必阅读本链接https://www.cnblogs.com/becks/p/13713278.html 场景描述: 登录用例A,参加活动用例B,用户参加活动需要 ...

  4. 康谋分享 | 自动驾驶联合仿真——功能模型接口FMI(终)

    在之前的文章中,我们介绍了如何构建简单的车辆模型,并基于FMI2.0构建了其FMU,其最终结构为: 今天将会和大家分享如何在aiSim中,通过UDP和aiSim车辆动力学API(Vehicle Dyn ...

  5. [笔记]关于JavaScript定时器如何清除和重启

    定时器的清除和重启方法: // var t=setInterval(fun1,500) //fun1是你的函数 var fun1=function(){ //写入你的函数; } clearInterv ...

  6. <HarmonyOS第一课08>保存应用数据

    视频链接: https://developer.huawei.com/consumer/cn/training/course/slightMooc/C101717498132814493 ?ha_so ...

  7. 从车道检测项目入门open cv

    从车道检测项目入门open cv 前提声明:非常感谢b站up主 嘉然今天吃带变,感谢其视频的帮助.同时希望各位大佬积积极提出宝贵的意见.(❁´◡`❁)(●'◡'●)╰(°▽°)╯ github地址:h ...

  8. [随记]-我安装 arch linux 的记录

    一.下载安装包 archlinux-x86_64.iso 下载传送门:Arch Linux BitTorrent Download 是磁链和种子下载,往下拉,找到 HTTP Direct Downlo ...

  9. json格式转为List集合

    一.JSON格式 {"code":"200","msg":"success","data":[&qu ...

  10. Linux 下搭建 Spark3 + Jupyter 环境

    最近想着来玩一玩大数据, 前段时间集中过了一遍 java, 最近又看了一些基础的 scala, 我感觉吧, 我都不想学. 还是觉得用 sql, javascript, python 这种脚本语言操作起 ...