参照 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. Jmeter 之bzm- Concurrency Thread Group 压测

    bzm- Concurrency Thread Group  并发线程组代替 jp@gc - Stepping Thread Group线程组. 1.  下载jmeter-plugins-manage ...

  2. 从一道CTF题学习python字节码到源码逆向

    概述: 该题来源为2022爱春秋冬季赛ezpython,难度不是很大刚好适合我这样的萌新入门 题目: 3 0 LOAD_CONST 1 (204) 3 LOAD_CONST 2 (141) 6 LOA ...

  3. Kali Pi 安装 RTL8812AU驱动

    今天,我们来实操安装一下昨天的RTL8812​的无线网卡驱动. 说明 我们今天使用的网卡是磊科的NW392无线网卡,其主要核心为NW392. 一张32G内存卡 树莓派为树莓派4B 4G-RAM 系统为 ...

  4. [常用工具] OpenCV获取网络摄像头实时视频流

    所需要硬件及软件环境: python 3/OpenCV3.4 or C++11/OpenCV3.4 1 RTSP协议 RTSP (Real Time Streaming Protocol),是一种语法 ...

  5. [随笔所想] CSDN认证博客专家申请通过随笔所想

    本篇博客写于2020年5月13日晚,为了纪念CSDN博客专家申请通过. 2020年5月10日晚,也就是2020年的母亲节当晚提交了博客专家申请.在2020年5月13日上午,就知道博客专家申请通过啦!前 ...

  6. idea的简单介绍

    上一篇博客中只是了解一下java文件是怎么编译的,但是一般来说大家都是使用编程软件来进行开发,我是使用IntelliJ IDEA进行开发的 官网下载IDEA(自行安装哈):地址:https://www ...

  7. SICTF2023 web_wp

    兔年大吉 源码如下 <?php highlight_file(__FILE__); error_reporting(0); class Happy{ private $cmd; private ...

  8. C Primer Plus(4.8)編程練習

    /*C Primer Plus (4.7) 5*/ 1 include<stdio.h> 2 #define BOOK "War and Peace" 3 int ma ...

  9. 深入Typescript--02-Typescript数据类型

    基本类型 一.最最基础的类型 布尔.数字.字符串类型 let bool:boolean = true; let num:number = 10; let str:string = 'hello wor ...

  10. Java基础1-1-3—java基础语法(条件控制语句)

    3. 条件控制语句 3.1 流程控制语句-顺序结构 流程控制语句:通过一些语句,来控制程序的[执行流程] 流程控制语句分类: 顺序结构 分支结构(if,switch) 循环结构(for,while,d ...