随笔分类 - 树上问题
摘要:【IOI2021】registers 【IOI2021】dungeons 考虑一个关键性质:打死一个怪以后,英雄的体力值会增长怪物的血量,也就是说,如果英雄打死了一个和自己势均力敌的怪物,那么其血量会成倍增长。 发现了这个性质之后,我们考虑对权值分层,即设第 $i$ 层表示血量区间 $[2^i,2^
阅读全文
摘要:预备知识 向量空间: 定义 $(F, V, +, •)$ 为向量空间(也称线性空间),其中 $F$ 为域,$V$ 为集合,$V$ 中元素称为向量,$+$ 为向量加法,$•$ 为数乘运算,且运算满足 $8$ 条公理。 线性无关: 向量空间中,对于 $V$ 上一组 $n$ 个向量 $x_i$ ,若存在不
阅读全文
摘要:毛毛虫剖分 一种由重链剖分推广而成的树上结点重标号方法,支持 修改/查询 一只毛毛虫的信息,并且可以对毛毛虫的身体和足分别 修改/查询 不同信息 。 可以用来解决一些大力树剖也可以解决的问题。 一些定义: 毛毛虫:一条树上的链和与这条链邻接的所有结点构成的集合; 虫身:毛毛虫的链部分; 虫足:毛毛虫
阅读全文
摘要:Cayley 定理 节点个数为 $n$ 的无根标号树的个数为 $n^{n−2}$ 。 这个结论在很多计数类题目中出现,要证明它首先需要了解 $\text{Prufer}$ 序列的相关内容。接下来给出证明。 证明: 每一棵树都可以转换为一个 $\text{Prufer}$ 序列。 根据定义,每一个节点
阅读全文
摘要:CF1458C Latin Square 将每个数表示成三元组 $(i,j,a[i][j])$ ,UDLR 相当于给前两维加一或减一,IC 相当于交换某两维。 操作是对整体进行操作的,那么直接记录操作对每个位置的影响即可。 点击查看代码 #include<bits/stdc++.h> using n
阅读全文
摘要:CodeChef - BTREE Union on T 首先可以很自然地想到把虚树建出来然后在上面搞。 我们做两遍 \(\text{dp}\),把每个点的 \(r_i\) 更新成从这个点出来能覆盖的最远距离和从其他点出来经过这个点后能够覆盖的最远距离的最大值。 这样我们保证了对于一条边 \((u,v
阅读全文
摘要:【UNR #5】获奖名单 【UER #9】知识网络 考虑为何复杂度低于 \(n\) 次最短路算法——部分点具有类似信息。大概是同颜色点。那么可以预处理每种颜色的点到每个点的最短路。 然后考虑 \(a → b\) 实际最短路。它与 \(\text{color(a)}\to \text{b}\) 相去不
阅读全文
摘要:CF547E Mike and Friends \(\text{SAM}\) 或 \(\text{AC}\) 自动机板子题,线段树合并或离线二位数点均可。 点击查看代码 #include<bits/stdc++.h> using namespace std; int n,q; char s[1000
阅读全文
摘要:点分治 [SDOI2016]模式字符串 点击查看代码 #include<bits/stdc++.h> using namespace std; typedef unsigned long long int ulli; const ulli base = 31; const int inf=0x3f3
阅读全文
摘要:边分治 「BZOJ 2870」最长道路tree 点击查看代码 #include<bits/stdc++.h> using namespace std; int n,m; int v[400005]; int ver[400005],ne[400005],head[400005],cnt=1,val[
阅读全文
摘要:一般提到动态树,我们会不约而同的想到 LCT,这算是比较通用,实用,能力较为广泛的一种写法了。当然,掌握 LCT 就需要熟悉掌握 Splay 和各种操作和知识。ETT(中文常用称呼:欧拉游览树)是一种及其睿智且暴力,可以用暴力数据结构维护的一种除了能胜任普通动态树的 Link & Cut 操作还可以
阅读全文
摘要:【模板】动态树(Link Cut Tree) Link-cut-tree是一种维护动态森林的数据结构,在需要动态加边/删边的时候就需要LCT来维护。 Link-cut-tree的核心是轻重链划分,每条重链用一颗splay来维护。 点击查看代码 #include<bits/stdc++.h> usin
阅读全文