dfs序上的带修主席树;求链上的信息仍然是四个点差分,只不过求前缀和变成了 $\log$ 的树状数组; 2020.01.20 ...
分类:
其他好文 时间:
2020-01-20 09:44:54
阅读次数:
59
【前置知识】 "强连通分量" 【定义】 【割点】去掉这个点之后,图会被分成多个点集,点集之间的点无法相互到达 【算法】 模板题 "【luogu P3388】" 这个算法最关键的地方是对每个点判断的时候 将图的dfs序视作一棵多叉树进行操作,同时利用dfs序判断和他连接的点能否访问到另外一边的点 ...
分类:
编程语言 时间:
2020-01-18 12:48:44
阅读次数:
86
前言 树链剖分,我觉得最精妙的地方就在于它是通过$dfs$序将树形结构转为线性结构便于处理,进而可以用数据结构(线段树、树状数组等)去进行修改和查询。 将复杂的结构转化为相对我们熟悉简单的结构,这个思想对很多问题是通吃的,不仅仅在树形问题,算法中,在其他领域中也常常会用到这种思想 我们先来回顾两个问 ...
分类:
其他好文 时间:
2020-01-15 13:30:34
阅读次数:
170
给你一棵树,每次修改一个子树的所有值,然后单点查询。 按照DFS序把节点排列(即在DFS中出现的先后次序),同一个子树在序列中连续。 1 #include <cstdio> 2 using namespace std; 3 typedef long long ll; 4 int n,q,T,Tc,c ...
分类:
其他好文 时间:
2020-01-14 00:11:04
阅读次数:
77
题目大意 给你一个带权无向图,满足图上任意一条边最多属于一个环,有$q$个询问,求$u,v$之间的最短路。 $n,q\leq 10000$ Solution 首先用Tarjan建一棵以$1$为根的搜索树,找出每个环,记录环的总长,将环内每个点$u$连向环内$dfs$序最小的点$v$,边权为$u$到$ ...
分类:
其他好文 时间:
2019-12-23 22:21:01
阅读次数:
81
"Link" Description 给定一棵n个点的树,树上有若干关键点。每次操作将一个关键点变成非关键点或一个非关键点变为关键点,并询问所有关键点形成的极小联通子树边权和的两倍。 Solution 先摆结论: 假设树上关键点按照$dfs$序排列为{$a_1,a_2,a_3,\dots,a_t$} ...
分类:
其他好文 时间:
2019-12-22 18:04:21
阅读次数:
91
code: #include <vector> #include <cstdio> #include <set> #include <cstring> #include <string> #include <algorithm> #define N 200007 #define ll long lo ...
分类:
编程语言 时间:
2019-12-20 18:13:59
阅读次数:
67
"POJ3321 Apple Tree" "线段数例题解析合集" 题意:给定一棵树,有两种操作:1、把某个节点上的数^1(若是1改为0,是0改为1) 2、查询以某个节点为根节点的子树中1的个数 在一棵树上进行单点修改和查询,只要进行一遍dfs,记录每个点的dfs序即可把问题转化到链上用线段树进行维护 ...
分类:
移动开发 时间:
2019-12-15 01:02:56
阅读次数:
93
核心思想: (听名字高大上,实际上没什么东西……虚树的题主要难在如何操作虚树) 给出$k$个关键点,我们要建出一棵只包含这些关键点和他们$lca$的点数最少的树,以实现$dp$等操作。 标志性的数据范围是$\sum{k}\leq 10^{5}$之类的。 建树方法: 1.将所有关键点按$dfs$序排序 ...
分类:
其他好文 时间:
2019-12-13 23:55:51
阅读次数:
159
用dfs序+子树大小 >>>线性dp #include<iostream> #include<cstdio> #define ri register int #define u int namespace opt { inline u in() { u x(0),f(1); char s(getch ...
分类:
其他好文 时间:
2019-11-12 16:12:11
阅读次数:
83