先求出任意一棵最小生成树,然后对边分类讨论1.非树边,答案即最小生成树的环上的最长边2.树边,反过来考虑,相当于对于每一个点对那条路经打上标记,取min对于1直接用倍增维护即可,对于2可以用树链剖分/差分+启发式合并但都需要两个log,所以有一种很神奇的做法考虑从小到大枚举非树边,然后暴力修改,容易 ...
分类:
其他好文 时间:
2019-11-12 16:02:56
阅读次数:
76
树链剖分——简单而强大的数据维护方法 只是放个板子而已。 用我的码风覆盖了的。 1 #include<bits/stdc++.h> 2 using namespace std; 3 // 4 inline int read(){ 5 int f=1,x=0; 6 char c=getchar(); ...
分类:
其他好文 时间:
2019-11-09 17:27:41
阅读次数:
70
黑科技——树剖两次$dfs$转一次$dfs$! 重所周知,树链剖分通常是要$dfs?$两次的,就像这样: 但是在一些$n$比较大并且的~~卡常毒瘤题~~中,我们如果使用了两次$dfs$就有可能会出现$tle$的情况。 在这时,若我们无法优化本质算法的情况下我们需要卡常。 怎么卡呢?利用$dfs$序: ...
分类:
其他好文 时间:
2019-11-09 15:31:48
阅读次数:
85
几年间整理了一些模板放在 gist 上。做个列表方便检索。 "头文件" 内含模算术、树状数组、并查集、树链剖分等类和常用的宏。 字符串 "KMP" "Manacher" "AC 自动机" 代数 "tourist 的模算术模板" "分数类" 数论 "中国剩余定理" 矩阵 "矩阵乘法类" "判断矩阵是否 ...
分类:
其他好文 时间:
2019-11-09 10:13:21
阅读次数:
152
"Luogu P2146" 由于对于每一个软件包有且只有一个依赖的软件包,且依赖关系不存在环。 很显然这是一个树形的结构。 再看题目要求的操作,安装实际上对应的是覆盖根节点到当前节点的路径,卸载则是覆盖该节点的整颗子树。 对于这样的操作,树链剖分+线段树可以很轻松地维护。 值得注意的是,根节点编号为 ...
分类:
其他好文 时间:
2019-11-06 10:25:37
阅读次数:
90
树链剖分的基本思想是把一棵树剖分成若干条链,再利用线段树等数据结构维护相关数据,可以非常~~暴力~~优雅地解决很多问题。 树链剖分中的几个基本概念: 重儿子:对于当前节点的所有儿子中,子树大小最大的一个儿子就是重儿子(子树大小相同的则随意取一个) 轻儿子:不是重儿子就是轻儿子 重边:连接父节点和重儿 ...
分类:
其他好文 时间:
2019-11-05 15:08:57
阅读次数:
77
[TOC] 一、关于树链剖分 你的好盆友最近抛给你这样一个难题~~(无中生友)~~: " 一棵树由n个节点,每个节点都有一个权值w,现在想让你对这棵树完成下列操作: 1.把节点u的权值改为t 2.询问节点u到节点v的权值和 3.节点u到v的最大值 " 你看了看题目,发现这就是树链剖分的板子题... ...
分类:
其他好文 时间:
2019-11-04 17:13:07
阅读次数:
60
问题描述 "LG CF343D" 题解 树剖,线段树维护0 1序列 yzhang:用珂朵莉树维护多好 $\mathrm{Code}$ cpp include using namespace std; template void read(Tp &x){ x=0;char ch=1;int fh; w ...
分类:
其他好文 时间:
2019-11-03 22:04:34
阅读次数:
100
我终于码了树链剖分,别人半年前学会的东西我终于入门辣!!! 先放全代码: 1 #include<cstdio> 2 #include<iostream> 3 #include<cstring> 4 #include<cmath> 5 #define MAXN 30010 6 using namesp ...
分类:
其他好文 时间:
2019-10-30 13:43:43
阅读次数:
81
"题面" 分析 可以先求最大生成树森林,然后对每棵树进行树链剖分,然后乱搞... 注意,由于是边权,则统一挂向连接点的更深的(挂向浅的后果自行分析),求路径上最小边时不在同一链就普通处理,在同一链,所求区间应去掉更浅的端点。 本题我以为只有只有一棵生成树~~结果CCF原数据真只有一棵~~,感谢luo ...
分类:
其他好文 时间:
2019-10-29 00:03:29
阅读次数:
86