树论
文章平均质量分 81
如题
Edward The Bunny
这个作者很懒,什么都没留下…
展开
-
树形DP小结
本文用于记录一些做过的树形dp题。原创 2022-11-24 23:18:18 · 316 阅读 · 0 评论 -
树链剖分相关
树链剖分这玩意儿还挺重要的,是解决静态树问题的一个很好的工具~原创 2024-07-10 16:06:31 · 283 阅读 · 0 评论 -
树上前缀和&差分
显然转化后的问题用树状数组就可以简单维护。类比一下,对于树上问题,我们令。主要用途:区间修改,单点查询。原创 2022-10-26 13:57:42 · 333 阅读 · 0 评论 -
基环树小记
概念基环树就是有n个点n条边的图(比树多出现一个环)。特殊形态的基环树无向树(N点N边无向图)外向树(每个点只有一条入边)内向树(每个点只有一条出边)以上三种树有十分优秀的性质,就是可以直接将环作为根。就可以对每个环的子树进行单独处理,最后再处理环找环无向图#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace原创 2021-11-19 16:11:53 · 285 阅读 · 0 评论 -
[XSY4197] Snow(树形DP)
我们在树上的每个点iii上放aia_iai个小点,初始时先让每个点单独减,这样要花费aia_iai之和的次数。然后尝试把某些减合并。一个点上面的小点至多可以向两个相邻的小点连边(这两个小点不能在同一个点上)。每连一条边,合并次数+1,答案-1。问题变成求一棵树内的最大合并次数。首先明确该问题满足最优子结构,即考虑以UUU为根的子树时,若U,VU,VU,V上的小点u,vu,vu,v可以合并,合并u,vu,vu,v 一定不比 不合并u,vu,vu,v以让fau,ufa_u,ufau,u合并 劣。原创 2021-11-19 15:20:36 · 302 阅读 · 0 评论 -
[XSY3112] 接水果(树上包含路径,整体二分,扫描线)
给出一棵nnn个点的树。接下来给出PPP条树上路径ai→bia_i\to b_iai→bi,及其权值cic_ici。最后有QQQ个询问,每个询问给出一条树上路径ui→viu_i\to v_iui→vi,问在包含ui→viu_i\to v_iui→vi的所有树上路径中(包含指ui→viu_i\to v_iui→vi是ai→bia_i\to b_iai→bi的子路径),权值第kkk小的路径权值是多少?不妨设dep[u]<dep[v]dep[u]<dep[v]dep[u]<原创 2021-11-19 12:05:52 · 134 阅读 · 0 评论 -
[AGC009B] Tournament(多叉树转二叉树后的最小可能深度)
传送门把aia_iai看成faifa_ifai,建出一棵多叉树,再把多叉树转成二叉树,转出来的每棵二叉树对应着一种比赛方式。以n=8,a2,...,8=1,1,2,4,3,3,3n=8,a_{2,...,8}=1,1,2,4,3,3,3n=8,a2,...,8=1,1,2,4,3,3,3为例,多叉树转出的二叉树深度=赛程二叉树的深度考虑求多叉树转二叉树后的最小可能深度:假设uuu的所有儿子vvv的子树都已经转化好了:现在要把uuu的子树转成二叉树:设dep[x]dep[x]dep[原创 2021-11-19 11:08:21 · 324 阅读 · 0 评论 -
[CF995F] Cowmpany Cowmpensation(树形dp,拉格朗日插值)
树形DP:设f[u][i]f[u][i]f[u][i]表示给uuu的子树分配工资,uuu点工资为iii的方案数f[u][i]=∏v∈sonu(∑j=1if[v][j])f[u][i]=\prod\limits_{v\in son_u}(\sum\limits_{j=1}^{i}f[v][j])f[u][i]=v∈sonu∏(j=1∑if[v][j])前缀和优化:设g[u][i]=∑j=1if[u][j]g[u][i]=\sum\limits_{j=1}^{i}f[u][j]g[u][i]=j=原创 2021-11-18 14:45:30 · 166 阅读 · 0 评论 -
[XXSY] 构树(prufer序列,树上连通块DP)
传送门CayleyCayleyCayley公式:一个完全图有nn−2n^{n-2}nn−2棵无根生成树(可用prufer序列证明)扩展CayleyCayleyCayley公式:被确定边分为大小为a1,a2,⋯ ,ama_1,a_2,\cdots, a_ma1,a2,⋯,am的连通块,则有nm−2∏i=1main^{m-2}\prod\limits_{i=1}^{m}{a_i}nm−2i=1∏mai种生成树我们可以强制生成树中的边是否与原树中的边相同。设dp[u][i][j]dp[u][i]原创 2021-11-17 14:42:07 · 583 阅读 · 0 评论 -
[集训队作业2018] 三角形(贪心,堆,线段树合并)
传送门首先,在结点uuu放上w[u]w[u]w[u]个石子后,出于贪心考虑,下一步一定会把uuu的所有儿子vvv上的石子收回手中。转换题意:即cntcntcnt为当下树上的石子数,对每个结点uuu可以执行一次操作:step1. cnt+=w[u]cnt+=w[u]cnt+=w[u]step2. cnt−=∑v∈son(u)w[v]cnt-=\sum_{v\in son(u)}w[v]cnt−=∑v∈son(u)w[v]当且仅当对uuu的所有儿子vvv都执行过操作,才能对uuu执行操作。问原创 2021-10-12 22:04:57 · 319 阅读 · 1 评论 -
[NOIP2016 提高组] 天天爱跑步(树上差分)
如果没有时间的限制,这题就是对每个点iii,求经过iii的路径数,用树上差分解决即可:枚举路径x→y{x\to y\{x→y{a[x]+=1;a[y]+=1;a[x]+=1;a[y]+=1;a[x]+=1;a[y]+=1;a[lca(x,y)]−=1;a[fa[lca(x,y)]]−=2;a[lca(x,y)]-=1;a[fa[lca(x,y)]]-=2;a[lca(x,y)]−=1;a[fa[lca(x,y)]]−=2;}\}}枚举点i{i\{i{经过iii的路径数 = 以iii为根的子原创 2021-10-11 11:07:21 · 288 阅读 · 0 评论 -
[XSY3383]多线程(笛卡尔树,DP)
%%%tjytjytjy的笛卡尔树做法:设dp(l,r,Amin,Bmin)dp(l,r,Amin,Bmin)dp(l,r,Amin,Bmin)为把c[l],c[l+1],...,c[r]c[l],c[l+1],...,c[r]c[l],c[l+1],...,c[r]划到A,BA,BA,B两线程中,且划到AAA线程的数>Amin>Amin>Amin,划到BBB线程的数>Bmin>Bmin>Bmin的方案数。我们找到ppp,满足c[p]=max{c[l],c[l+1],原创 2021-10-02 17:51:59 · 164 阅读 · 0 评论 -
[XSY3320] string (AC自动机,哈希,点分治)
前置芝士:回文前缀&&borderborderborder推荐博客推荐博客考虑点分治,问题变成求经过重心的回文路径个数。一条经过重心的回文路径长这样:xxx到zzz的串与yyy到rootrootroot的串相同。建出根到每个节点对应的串的AC自动机,并在failfailfail树上找出每个串的回文前缀。判断根到某个节点对应的串是不是回文串可以用哈希解决。根据borderborderborder理论,一个回文串的所有回文前缀的长度可以组成一个不超过O(logn)O(logn)O原创 2021-09-30 13:35:39 · 155 阅读 · 0 评论 -
[XSY] 绿色(圆方树、树形DP、树上差分)
绿色题意简述题解首先,每次修改完点权后,重新考虑一遍所有路径显然是不现实的,所以我们考虑求出经过每个点的两端同色的简单路径数,这样权值和容易统计和修改。接下来分析仙人掌上的简单路径性质。一条简单路径上的边,可以分为桥边和环上的边。过桥只有一种方法,而过同一个环有两个方向的环边可选。现在,我们选取一个关键点,强制简单路径必须通过该点。如果关键点在一个环上,且该简单路径在该环上的第一个和最后一个点均不是关键点,那么该环只有一个方向的环边可选。建立原仙人掌的圆方树。如果定义方点贡献 2 种方案,原创 2021-03-29 20:40:26 · 205 阅读 · 0 评论 -
[XSY] 树与图(树形DP、生成函数、分治NTT、重链剖分)
树与图 如果真的在图上跑算法,那么光建图复杂度就O(n2logn)O(n^2logn)O(n2logn)了,这显然不可行。所以一定要把 在图上的操作 转换成 在树上的操作 在图上删去点u,相当于在树上删去u到根节点的链,并把u的整棵子树删掉 如果我们枚举算法可能产生的所有过程,然后再去求每个过程对应的删点次数,那么光枚举过程就已经可以T爆了 所以我们只能枚举删点次数,然后求出该删掉次数对应多少种过程 这可以用树形DP实现,时间复杂度O(n3)O(n^3)O(n3) 可以想到用生成函数进一步优化原创 2021-03-17 22:43:04 · 247 阅读 · 0 评论 -
[XSY] 线图(树形DP、分类讨论)
如图,每个L(L(T))上的点对应T上的一条三点链 在连接L(L(T))上两点,当且仅当两点代表的三点链在T上有共边,且边权为 共边边权*2+非共边1边权+非共边2边权 在L(L(T))上从点u走到点v,等价于[ ]...原创 2021-03-05 14:57:39 · 249 阅读 · 0 评论 -
CF1088F Ehab and a weird weight formula(树上最优性问题、贪心+倍增)
Description给出一棵 n 个结点的树,点 i 有正权值 wiw_iwi,wiw_iwi 互不相同。除了权值最小的点,保证每个点 u 都有一个邻点 v 使得 wvw_vwv < wuw_uwu。构造一棵树,最小化代价:对于每个点 u,产生 degu×wudeg _u \times w_udegu×wu 的代价,其中 degudeg _udegu 是构造的树中 u 的度数。对于每条边 (u, v),产生 ⌈log2dis(u,v)⌉×min(wu,wv)⌈log_2di转载 2021-02-05 09:26:03 · 128 阅读 · 0 评论 -
CF650E Clockwork Bomb(树上构造类问题、并查集)
Description给出两棵 n 结点的有标号树。每次操作删去第一棵树的一条边,再加上一条边,需要保证此时还是一棵树。构造一种操作序列,将第一棵树变成第二棵树,使得操作数最小。n ≤ 5×1055 \times 10^55×105Solution显然,对于第一颗树的边x↔yx \leftrightarrow yx↔y,如果这条边在第二颗树中也存在,那么是不可能更改这条边的。一个朴素的想法是直接遍历第一颗树,如果当前节点和其父亲连的边在第二颗树中没出现,那么更改为连向第二颗树中的父节点。但原创 2021-02-05 08:33:49 · 181 阅读 · 0 评论 -
CF526G Spiders Evil Plan(树上最优性问题、倍增+线段树)
Description一棵 n 个结点的树,有正边权。用 y 条链覆盖这棵树,满足:所有链连通(有重点即算作相连)点 x 被覆盖被覆盖的边的权值和尽可能大q 次给出 x, y,询问最大边权和,强制在线。n, q ≤ 10510^5105Solution可以发现一些比较显然的性质:权值是正的,那么链的端点一定可以全部调整成叶子。如果链不连通,可以交换链的端点使它们连通。使用 k 条路径就可以覆盖一棵有 2k 个叶子的树。(先以任意方式匹配叶子。如果有两条路径不相交,原创 2021-02-05 07:51:14 · 260 阅读 · 0 评论 -
CF1137F Matches Are Not a Child‘s Play(树上数据结构问题、树链剖分+ODT)
Description一棵 n 个点的树,点权最初为 1 ∼ n 的排列。定义一个删点过程:每次找到权值最小的叶子,删去它以及连接的边,重复这个过程直到剩下一个点,然后删去最后的点。处理 q 个询问:将一个点 x 的权值赋为当前最大权值 +1。查询在删点过程中,x 会是第几个被删除的。n, q ≤ 2×1052 \times 10^52×105Solution观察到删除序列的一些性质:权值最大的点最后一个被删。权值最大的点为 x,次大的为 y,那么序列最后一段就是 y 到 x转载 2021-02-04 20:24:15 · 159 阅读 · 0 评论 -
UOJ284 快乐游戏鸡(树上动态规划问题、长链剖分+单调栈)
参考文章:https://vfleaking.blog.uoj.ac/blog/2292https://www.cnblogs.com/penth/p/9801945.htmlhttps://blog.csdn.net/qq_42555009/article/details/100934540https://blog.csdn.net/zxyoi_dreamer/article/details/101705010https://blog.csdn.net/Mr_wuyongcong/article原创 2021-02-04 17:04:28 · 1015 阅读 · 1 评论 -
[CF966E] May Holidays(树上数据结构问题、分块+虚树)
Description一个 n 个结点的有根树,每个结点 x 有一个值 txt_xtx,和一个颜色 (黑/白)。m 次操作:翻转某点颜色。询问有多少点 x 满足:x 为黑色,x 的白色后代数 > tx。n, m ≤ 10510^5105Solution令 wi = ti− 子树内白点数,那么询问就是 wi < 0 的黑点数,修改就是翻转颜色并将至根路径的w值+1/ − 1。思来想去好像没有什么奇妙的数据结构能在O(nlogn)O(nlogn)O(nlogn)或O(nlog原创 2021-02-04 16:52:53 · 177 阅读 · 0 评论 -
[bzoj 4811] 由乃的OJ(贪心 + 树链剖分)
前置技能:[Noi2014]起床困难综合症。不难看出,这道题其实就是上一道题的加强版在上一道题中,因为位运算时位与位之间互不干扰所以从高位到低位枚举初始值二进制上的每一位为0和为1时,经过n次计算后这一位的结果,贪心选取在这题中,我们也可以用同样的思路求取答案因为有树上路径查询,考虑树链剖分,用线段树维护每一位初始为0和1时,经过一个区间的计算变为多少因为&、|、^ 运算都符合结合律,所以这样做是可行的问题是,&、|、^ 运算并不都满足交换律,即每个区间从左到右计算和从右到左计原创 2020-08-21 21:14:49 · 145 阅读 · 0 评论 -
[BZOJ1095][ZJOI2007]捉迷藏 & Query on a tree IV(树链剖分)
首先,我们求出树的重链,然后对于每一条链,建一颗线段树树大概长这样:(其中用红边连起来的是一条条重链)在线段树上,我们维护:Opt(u):经过u节点代表的链的两个白点间的最长路径长度MaxL(u):u节点代表的链的左端点到最远的白点的距离MaxR(u):u节点代表的链的右端点到最远的白点的距离怎么维护呢?我们再定义一些辅助变量方便描述:D(i):节点i到最远的白点的距离D2(...原创 2019-12-07 09:35:38 · 174 阅读 · 0 评论