随笔分类 -  树论

摘要:红色——树边 黄色——返祖边(顾名思义,返回祖先) 绿色——横叉边 阅读全文
posted @ 2020-11-04 14:43 ke_xin 阅读(131) 评论(0) 推荐(0)
摘要:并查集重构树 [PA2014]Fiolki bzoj3712 我们将每瓶药看成一个节点,对于一个操作合并x,y两瓶药就再新建一个节点代表这个操作,左右子节点分别是x,y两瓶药所在子树的根节点。 这样像kruskal重构树一样建出一棵二叉树,也叫并查集重构树。 可以发现对于每一对反应的两瓶药x,y,都 阅读全文
posted @ 2020-10-13 10:50 ke_xin 阅读(131) 评论(0) 推荐(0)
摘要:LCA 基本概念: 给定一棵有根树,若节点z既是节点x的祖先,也是节点y的祖先,则称z是x,y的公共祖先。在x,y的所有公共祖先中,深度最大的一个称为x,y的最近公共祖先,记为LCA(x,y)。 LCA(x,y)是x到根的路径与y到根的路径的交汇点。它也是x与y之间的路径上深度最小的节点。求最近公共 阅读全文
posted @ 2020-10-09 10:28 ke_xin 阅读(53) 评论(0) 推荐(0)
摘要:圆方树 重要的:::注意点权赋值 在一般无向图上使用它 •配合点双连通分量缩点用的 •对于一个dcc,建立一个方点,dcc内所有点向他连边 •割点关联多个dcc,连接多个方点 •这样会形成一棵树,实际上dcc缩点可以有不同的建树方式 圆方树的点数小于 2n,这是因为割点的数量小于 n,所以请注意各种 阅读全文
posted @ 2020-08-28 10:28 ke_xin 阅读(45) 评论(0) 推荐(0)
摘要:树链剖分——轻重链剖分 blog https://blog.csdn.net/qq_40482358/article/details/89676297 把树上的问题转化成序列问题(然后就快乐线段树维护) 概括一下就是把树划分为若干条链,然后一个链的dfs序是连续的,对于树上两点,我们可以通过跳链直到 阅读全文
posted @ 2020-08-26 21:58 ke_xin 阅读(52) 评论(0) 推荐(0)
摘要:虚树,是对于一棵给定的节点数为 n的树 T,构造一棵新的树 T' 使得总结点数最小且包含指定的某几个节点和他们的LCA。 虚树是只包含关键点以及关键lca的点,而其他不影响虚树结构的点和边都相当于进行了路径压缩,整颗虚树的规模不会超过关键点数目的两倍. 虚树实际就是为了解决一类树形动态规划问题而诞生 阅读全文
posted @ 2020-08-26 15:55 ke_xin 阅读(132) 评论(0) 推荐(0)
摘要:树的直径 模板poj1985 树形dp **优点:**可以处理负边权的树 **缺点:**只能求一个树的直径的长度,其他的求不出 不妨设1号节点为根,将树看成有根树; 法1: \(d[x]\) 表示从$x$到以$x$为根的子树的最远距离 \(d[x]=max( d[y]+edge(x,y) );\) 阅读全文
posted @ 2020-08-26 11:30 ke_xin 阅读(81) 评论(0) 推荐(0)
摘要:dfs序 所以对于一棵树的$dfs$序来说,这个点和他所有的子节点会被存储在连续的区间之中。 所以如果一个点的起始时间和终结时间被另一个点包括,这个点肯定是另一个点的子节点。(括号化定理) 欧拉序有两种形式: 1 在每个结点进和出时加进序列。 2 只要到达每一个结点就把他加进序列。 —— 用于求LC 阅读全文
posted @ 2020-08-25 19:42 ke_xin 阅读(425) 评论(0) 推荐(0)
摘要:解决可带权树上简单路径统计问题 其精髓在于把无根树平均地分割成若干互不影响的子问题求解,极大降低了时间复杂度,是一种巧妙的暴力。 例: 模板给定一棵树(无根树)和一个整数 k ,求树上等于 k 的路径有多少条? ​ (存在) 枚举不同的两个点,然后dfs算出ta们间的距离,统计一下就行了 大概是 O 阅读全文
posted @ 2020-08-22 10:18 ke_xin 阅读(50) 评论(0) 推荐(0)
摘要:树上差分 松鼠的新家 很显然的 起点+1,终点+1,然后lca和 fa[lca] 都减 1 最后统计答案时 因为终点被重复算了两次 ,所以要减1 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> 阅读全文
posted @ 2020-08-22 10:13 ke_xin 阅读(55) 评论(0) 推荐(0)
摘要:最小生成树 Kruskal: 适用稀疏图,\(O(mlogm+ma(n))\) $a(n)$是一次并查集的复杂度,更快,更常用 把边按照权值进行排序,用贪心的思想优先选取权值较小的边,并依次连接,若出现环则跳过此边(并查集来判断是否存在环)继续搜,直到已经使用的边的数量比总点数少一即可。 #incl 阅读全文
posted @ 2020-08-22 10:05 ke_xin 阅读(106) 评论(0) 推荐(0)