参照 E_Space 的候选队论文,我们建出广义串并联图进行「删一度点」「缩二度点」「叠合重边」操作合并信息的表达式树。

我们把其描述成一颗 Leafy Tree。

我们不妨在每个叶节点处存一个点或者边,非叶节点处存一个算符 \(op\)。

每个非叶节点将根据其合并方式来决定其究竟表示一个点,还是表示一个边。

对于表示边的节点,我们可以用一个四维向量 \((A,B,C,D)'\) 描述之,表示左右点分别取 \(0/1\) 状态所对应的权值;注意左右不可交换。

对于表示点的节点,我们可以用一个二维向量 \((b,w)'\) 描述之(或者直接拓宽成 \((b,w,-\infty,-\infty)'\) 四维向量),表示其取两种方案是分别最大权。

合并操作不妨分为四种:「删一度点」「缩二度点」「叠合重边」「边序翻转」。

其中「边序翻转」操作用于把 \((u,v)\) 当作 \((v,u)\) 处理的情境。

建树过程可以通过 bfs 当前点类型实现。

对于四种操作,我们分别计算合并方式。

对当前 \(f,p,e=(f,p)\) 进行「删一度点」操作,其将合并为 \(f\)。

\[\begin{pmatrix}b_f\\w_f\end{pmatrix}\leftarrow\begin{pmatrix}\max\{b_f+b_p+A_e,b_f+w_p+B_e\}\\\max\{w_f+b_p+C_e,w_f+w_p+D_e\}\end{pmatrix}
\]

对当前 \(p,e_1=(u,p),e_2=(p,v)\) 进行「缩二度点」操作,其将合并为 \(e=(u,v)\)。

\[\begin{pmatrix}A_e\\B_e\\C_e\\D_e\end{pmatrix}\leftarrow\begin{pmatrix}\max\{A_{e_1}+b_p+A_{e_2},B_{e_1}+w_p+C_{e_2}\}\\\max\{A_{e_1}+b_p+B_{e_2},B_{e_1}+w_p+D_{e_2}\}\\\max\{C_{e_1}+b_p+A_{e_2},D_{e_1}+w_p+C_{e_2}\}\\\max\{C_{e_1}+b_p+B_{e_2},D_{e_1}+w_p+D_{e_2}\}\end{pmatrix}
\]

对当前 \(e_1=(u,v),e_2=(u,v)\) 进行「叠合重边」操作,其将合并为 \(e=(u,v)\)。

\[\begin{pmatrix}A_e\\B_e\\C_e\\D_e\end{pmatrix}\leftarrow\begin{pmatrix}A_{e_1}+A_{e_2}\\B_{e_1}+B_{e_2}\\C_{e_1}+C_{e_2}\\D_{e_1}+D_{e_2}\end{pmatrix}
\]

对当前 \(e=(v,u)\) 进行「边序翻转」操作,其将变为 \(e=(u,v)\)。

\[\begin{pmatrix}A_e\\B_e\\C_e\\D_e\end{pmatrix}\leftarrow\begin{pmatrix}A_e\\C_e\\B_e\\D_e\end{pmatrix}
\]

使用树剖,每次在矩阵中记录轻儿子的信息,进行重链信息合并,向链顶父亲传递信息。

容易构造转移矩阵。

这样子朴素实现单组询问是 \(O(\log^2n)\) 的,使用 GBT 等可以做到 \(O(\log n)\)。

代码实现

loj3076的更多相关文章

  1. [loj3076]公园

    为了方便,对题意做以下处理: 1.称"西部主题"和"科幻主题"分别为黑色和白色 2.删去题中"保证没有两条不同的道路连接同一对景点"的条件 ...

随机推荐

  1. 线程、GIL全局解释器锁、进程池与线程池

    目录 多进程实现TCP服务端并发 互斥锁代码实操 线程理论 创建线程的两种方式 多线程实现TCP服务端并发 线程的诸多特性 GIL全局解释器锁 验证GIL的存在 GIL与普通互斥锁 python多线程 ...

  2. 【机器学习】李宏毅——Transformer

    Transformer具体就是属于Sequence-to-Sequence的模型,而且输出的向量的长度并不能够确定,应用场景如语音辨识.机器翻译,甚至是语音翻译等等,在文字上的话例如聊天机器人.文章摘 ...

  3. python循环结构之for循环

    在python中,for循环是应用非常广的循环语句,遍历字典.遍历列表等等... # for语句结构 for 遍历 in 序列: 执行语句 遍历字典 lipsticks = {"Chanel ...

  4. cmd命令行ssh连接Linux服务器

    打开cmd工具 使用命令ssh连接服务器 ssh 用户名@ip地址 (不需要指定端口号,默认端口就是22) 输入密码即可

  5. Window注册表的学习记录

    注册表的结构: 概述:注册表是一种树状结构,在很早之前是系统的其他配置信息存放的文件,通常以.ini结尾的文件,因为数量太多不方便管理,后来就整合在一起形成了注册表.你可以按住键盘win+r,然后输入 ...

  6. 从开发属于你自己的第一个 Python 库,做一名真正的程序员「双语版」

    你好,我是悦创.之前我在 CSDN 编写了一篇开发 Python 库的教程,有人加我提问到的一些问题,我来更新一下这篇文章:https://blog.csdn.net/qq_33254766/arti ...

  7. Java基础篇——常用类

    Objec类 Test t1 = new Test(); Test t2 = new Test(); //toString方法,对某个对象的字符串输出 //getClass方法,返回该对象的Class ...

  8. 看我是如何用C#编写一个小于8KB的贪吃蛇游戏的

    译者注:这是Michal Strehovský大佬的一篇文章,他目前在微软.NET Runtime团队工作,主要是负责.NET NativeAOT功能的开发.我在前几天看到这篇文章,非常喜欢,虽然它的 ...

  9. SOFAJRaft源码阅读-ShutdownHook如何优雅的停机

    Java程序经常会遇到进程挂掉的情况,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的代码.JAVA中的ShutdownHook提供了比较好的方案.而在SOFAJRaft- ...

  10. djiango路由匹配、djiango路由层、反向解析、有名无名反向解析

    djiango路由匹配.djiango路由层.反向解析.有名无名反向解析 一.作业讲解(数据的增删改查) urls代码 from django.contrib import admin from dj ...