Time Limit: 1 Sec Memory Limit: 259 MB Submit: 1574 Solved: 651[Submit][Status][Discuss] Description 给一个N个点M条边的连通无向图,满足每条边最多属于一个环,有Q组询问,每次询问两点之间的最短路径。 Input 输入的第一行包含三个整数,分别表示N和M和Q 下接M行,每
Time Limit: 20 Sec Memory Limit: 512 MB Submit: 5246 Solved: 1978[Submit][Status][Discuss] Description 在一场战争中,战场由n个岛屿和n-1个桥梁组成,保证每两个岛屿间有且仅有一条路径可达。现在,我军已经侦查到敌军的总部在编号为1的岛屿,而且他们已经没有足够多的
虚树是用来解决树上的一些特定点问题的好方法。建立虚树的本质是缩二度点。具体来讲是这样的: 维护一个栈,表示虚树的最右链。栈从顶到底深度递减。一开始先 push 进根,方便操作。下面定义 stk[x] 为从栈顶向下数的第 x 个元素。 当加入一个点的时候,执行下述操作: 若栈只有根元素,那
题面 运输计划 题解 因为在写树剖的时候写崩了,所以这里提供一个 \(lca\) 的做法。 虽然有人说 \(lca\) 会被卡,但是我觉得用 \(tarjan\) 写出来复杂度也不假。(复杂度分析在下文) 前言 读完题不难发现,其实我们要清空权值的边就是在清空它之后,能把最长的路径降到最小。最大的最小我们
四毛子算法qwq 大概就是一种可以做到\(O(n)-O(1)\ RMQ\)的科技。 大概分三步来讲。 O(n)-O(1) 加减一序列RMQ 把序列按照\(B=\frac{log_2{b}}{2}\)分块,那么我们现在有\(n/B\)个块。 注意到块内可能的序列变化情况只有\(O(2^B)=O(\sqrt{n})\)种,我们显然可以通过预处理快速计算出每
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。 输入格式 第一行包含三个正整数 N,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N-1N−1 行每行包含两个正整数 x, yx,y,表示 xx 结点和 yy 结点之间有一条直接连接的边(数
转: [LNOI2014]LCA Link Description (q) 次询问,每次给定 (l,r,z) ,求 [sum_{i=l}^r dep[Lca(i,z)] ]Solution 如果不转换一下的话,应该是相当不好求。可以这样想,求两点 u 和 v 的 lca 的深度,其实就是求 u 和 v 到根的路径的交的大小。那么可以对其中一个点,修改其到根节点路径上的值,
这是一篇极其简单连像我这样省三参加不了省选的蒟蒻都能看懂的题解 前置知识: 倍增LCA 二分 栈 题意 PS:这是一篇完全面向初学者的题解,会非常细,大佬请无视 没有思路的时候, 我们往往可以从简单的情况下手, 比如一条链 我们记Pi为第i个需要搜集的宝石, S为起点, T为终点。 不
题目大意 \(n\)个点的树, 树上每一个点有一个宝石\(w_i\), 给出一个固定的数字不重复的序列\(p_i\)和一些询问\(u_i, v_i\), 对于每一个询问求出\(u_i\)到\(v_i\)的路径上, 按所给顺序\(p\)收集宝石的最多个数. \(n,q <= 10^5\) 解题思路 考场上是一点没想到这个.做题还是少了.
A. 昔我往矣 题目要求我们求取最小的翻新代价。每条边只有在第一次走过的时候才会被翻新,即增加翻新的代价。如果我们直接使用最短路算法的话,需要判断当前最短路上的路径是否被翻新过,也就是说我们是需要回溯最短路径,将沿路的翻新费用更新为0。因此需要对\(5\)个点的两两组合进
const int N=2e5+5; int n,m,_; int i,j,k; int a[N]; int son[N],sz[N],fa[N],dep[N]; int top[N]; struct Node { int to,c1,c2; Node(int to=0,int a=0,int b=0):to(to),c1(a),c2(b){} }; vector<Node>
Link Description \(q\) 次询问,每次给定 \(l,r,z\) ,求 \[\sum_{i=l}^r dep[Lca(i,z)] \]Solution 如果不转换一下的话,应该是相当不好求。可以这样想,求两点 u 和 v 的 lca 的深度,其实就是求 u 和 v 到根的路径的交的大小。那么可以对其中一个点,修改其到根节点路径上的值,都加一。然
[CCPC2020绵阳C] Code a Trie - Trie,贪心,LCA Description 有一个 Trie,其可能被插入了一些串,每个节点(含根节点)上都有一个值,这些值互不相同。在 Trie 上查询一个串时如果找到了就返回这个串结束节点的值,否则返回最后到达的节点的值。给定若干个查询串及查询结果,问是否存在这样的 T
LCA — 欧拉序+ST表 \(O(n\log n)\) 预处理,\(O(1)\) 询问。 \(lca(x,y)=\) 欧拉序中最早出现的 \(x\) 和 \(y\) 中间深度最浅的点。 Luogu P3379 #include <bits/stdc++.h> using namespace std; const int N=500010; inline int read(){ int x=0;bool f=false;char ch=getchar
最近公共祖先LCA 定义 最近公共祖先简称 LCA(Lowest Common Ancestor)。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 例题 这里先举例具体题目,下面根据不同方法给出不用题解代码。 洛谷 【模板】最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定
I.II.[POI2014]HOT-Hotels 加强版 易于发现,三点间两两距离相等,当且仅当两个LCA较深的点到它们的LCA距离相等,且第三个点到该LCA的距离与前两个点相同。 于是我们设 \(f_{x,i}\) 表示 \(x\) 子树中有多少对点,它们到LCA距离相同,且上述距离比该LCA到 \(x\) 的距离长 \(i\)。考虑现在将
倍增专题 P1306 斐波那契公约数 一个重要性质: g c d ( f [ n
这篇博客写的非常好 tarjan步骤 ①.任选一个点为根节点,从根节点开始。 ②.遍历该点u所有子节点v,并标记这些子节点v已被访问过。 ③.若是v还有子节点,返回2,否则下一步。 ④.合并v到u上。 ⑤.寻找与当前点u有询问关系的点v。 ⑥.若是v已经被访问过了,则可以确认u和v的最近公共祖
1 CF832D 玩转地铁 题目链接:https://codeforces.com/problemset/problem/832/d 2 题目描述 时间限制 \(2s\) | 空间限制 \(256M\) \(Misha\) 和 \(Grisha\) 是很有意思的两个男孩,他们很喜欢坐地铁玩,地铁有 \(n\) 个车站,由 \(n-1\) 条线路连接起来,每一条线路连接两个车站,所有
浙大城院的训练赛前4道是水题,40min可以直接砍掉。接着LCA这道题其实上一次ICPC里出现过,是一道模拟题。现在采用队友的代码学习一下 题目 链接:https://ac.nowcoder.com/acm/contest/12986/D 来源:牛客网 The N-ary tree is a tree that each node has exactly n child nodes. Y
参天大树 题目大意 给出一个 \(n\) 层的满二叉树,其根节点编号为 \(1\) ,对于每一个 \(x(x \ge 1)\) ,编号为 \(x\) 的节点有编号为 \(2x\) 与编号为 \(2x+1\) 的子节点。 需要从该二叉树的节点中选出一些节点(可以相同),求出所有情况中他们 \(LCA\) 的和。 则我们需要求出下面这个式
题目链接 题解 因为要进行异或运算,可以将\(a\)中的数按位存入二叉树中(有些像Trie树)。如题目样例一可存为如下的树: 据题意,\(a_i\)所连的边为与其异或值最小的元素,而该元素在二叉树中一定为与\(a_i\)相邻且与\(a_i\)的LCA最深的叶子节点。如上图中与\(1\)(第4层从左至右数第2个)连边
参考:倍增求LCA #include <iostream> #include <cstdlib> #include <vector> #include <queue> using namespace std; #define SIZE 500005 struct edge{ int to; int next; }edges[SIZE<<1]; int head[SIZE]; int depth[SIZE]; int fath
原来学习最小生成树的时候写了道题,发现得用最近公共祖先迫于无奈便学了LCA(不过确实很有用) LCA主要基于一种倍增的思想,和st表很像,通过预处理数据来花费空间换取时间。 要想学习怎么求LCA首先要学习LCA是什么。 在一颗数中,比如说图中的4和5,那么他们的最近公共祖先便是2。 如果是2和
世界树 题目链接:ybt金牌导航5-3-1 / luogu P3233 题目大意 有一棵树,边的权值都是 1。然后有一些特殊点,对于每个点,它会被离它距离最近的特殊点占有。 然后不同的时刻特殊点也会不同,问你在每个询问,每个特殊点会各占有多少个点。 (可以自己占有自己) 思路 你首先看到它只要特殊点的值,然