凡凡题解 ##ST表 \(f[i][j]\) 表示从 \(i\) 结点向上走到的第 \(2^j\) 个结点 \(f[i][0] = father[i]\),\(f[i][j] = f[f[i][j-1]][j-1]\) (先走 \(2^{j-1}\) 步,再走 \(2^{j-1}\) 步) void ...
分类:
其他好文 时间:
2021-02-24 12:50:19
阅读次数:
0
题目链接:https://acm.ecnu.edu.cn/contest/354/problem/A/ 原做法:树上倍增+lca,可能生成树的时候复杂度太高,用的是类似并查集的合并方式。 oj上的大佬:https://acm.ecnu.edu.cn/contest/354/submission/22 ...
分类:
其他好文 时间:
2021-02-15 12:10:05
阅读次数:
0
const int MAXN = 200000 + 10; const int MAXM = 2000000 + 10; int n, m; vi G[MAXN]; int vis[MAXN]; int fa[MAXN]; int ans[MAXN]; struct Query { int x, y ...
分类:
编程语言 时间:
2021-01-16 12:11:10
阅读次数:
0
题目 https://www.luogu.com.cn/problem/P1967 分析 分析题目我们可以知道,图中两点之间的路径是不唯一的,而且我们根据题意可以知道在选择路径的时候要尽量选择限重比较大的值, 对于两点u,v,如果u->v中最小的边的权值最大,那么这条路径u?>v一定在最大生成树上。 ...
分类:
其他好文 时间:
2020-06-26 20:21:02
阅读次数:
45
题意: 一棵无向树,输入点数和操作数,下面一行n个值代表每个点的权。下面n-1行是树边 操作分为 0 x w ,表示把点x的权改为w; k a b , 求出,从a到b的路径中,第k大的点权 题解: 对于每组询问,先求出两点的LCA,再从两点分别向LCA遍历,保存路径上所有的点权,排序输出第K大即可~ ...
分类:
编程语言 时间:
2020-03-19 22:03:47
阅读次数:
78
题意: 第一次世界大战后,许多城市遭到严重破坏,我们需要重建这些城市。但是,某些材料只能在某些地方生产。所以我们需要将这些材料从一个城市运到另一个城市。由于战争期间大部分道路已被完全摧毁,两个城市之间可能没有路径,也没有环存在。 现在,你的任务来了。在告诉您道路状况后,我们想知道任何两个城市之间是否 ...
分类:
编程语言 时间:
2020-03-19 20:11:31
阅读次数:
80
题目链接 题意如题 做法 先做一遍最小生成树 枚举添加每一条非树边的情况,每一次构成一棵基环树,在环上找一条最长边(如果等于该非树边就用环上的严格次小边) 倍增LCA,倍增预处理的时候顺便维护严格次大值和最大值(注意细节) (如果是非严格次小生成树则只需要维护最大值即可) 代码 #include < ...
分类:
其他好文 时间:
2020-02-17 12:41:29
阅读次数:
88
"Problem Link" $dis(u,v)$ 表示 $u$ 到 $v$ 在原来那棵树上的距离,可以用倍增lca $O(\log n)$ 求 从 $a$ 走到 $b$ 不走新边,那么距离 $len_1=dis(a,b)$ 因为树上的边可以随便走,所以只要 $len_1$ 与 $k$ 同奇偶并且 ...
分类:
其他好文 时间:
2020-02-16 12:56:30
阅读次数:
74
链接:Miku 这一道题只需要在倍增lca的板子上改一改就可以了。 宽度和深度可以在倍增lca的dfs预处理的时候判断一下就可以,至于最后问的两点之间的距离 首先需要求出两点公共祖先的位置,然后计算他们深度的差,并且按照题目要求分别处理即可 #include<iostream> #include<c ...
分类:
其他好文 时间:
2020-01-19 09:29:56
阅读次数:
77
圆方树 jzoj 1914. 【2011集训队出题】最短路 这是道圆方树+倍增LCA裸题。 圆方树,顾名思义,就是圆点和方点所组成的树。 而方点就是一个圆的根,一般都是$dfs$时第一个到这个圆的那个位置,然后另附一个点当做方点。然后圆所组成的点都连向方点。 而对于这种圆方边的边权,则为它到根的最近 ...
分类:
其他好文 时间:
2020-01-08 20:51:57
阅读次数:
82