lca板子】的更多相关文章

传送门(bzoj) 传送门(洛谷) 可以说这道也是一个板子题 由于题中是三个人需经过的路径最短 就会有一点点不太一样 那么 就两两求LCA 这样之后就会出现两种状况 一.所得到的三个LCA是相等的 那毫无疑问真正的LCA的值就是这个值 二.若不是第二种情况 那必然会出现 有且仅有一个LCA的值与令两个LCA的值不同 第二种情况正确性(不严格的)证明: 显然1和2的LCA是4 2和3的LCA是5 1和3的LCA也是5 既然2和3的LCA(5)的深度4大 那么也可把2和3的LCA看作是4和3的LCA…
传送门 (这次的英文题面要比上一个容易看多了) (英语蒟蒻的卑微) 又是一个很裸的LCA题 (显然,这次不太容易打暴力咧) (但听说还是有大佬用dfs直接a掉了) 正好 趁这个机会复习一下LCA 这里用的是倍增lct的思想(一不小心是会写tle的吧) (也有可能是因为我太弱了才t掉的) 我才不会说我有一次卑微了 一开始看PPT 以为自己明白了 结果发现 有一点点问题 由于本题中这个树是题里给的 所以节点的编号不可以简简单单认为是从上到下从左到右顺序排列的 (但其实这部算什么大问题啊qwq) (还…
题目链接:http://poj.org/problem?id=1330 Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 36918   Accepted: 18495 Description A rooted tree is a well-known data structure in computer science and engineering. An example…
#include<cstdio> #include<cstring> #include<algorithm> #define LL long long using namespace std; ; int read(){ ,f=,c=getchar(); ; c=getchar();} +(c-'); c=getchar();} return ans*f; } int n,q,k; LL ans,dis[M]; LL f[M][],vis[M],deep[M]; LL…
懒!!直接转载!!!! https://solstice23.top/archives/62…
倍增LCA板子,没有压行,可读性应该还可以.转载请随意. #include <cstdio> #include <cstring> #include <algorithm> #include <vector> using namespace std; const int maxn = 5e5; int n, m, rt; vector<int> G[maxn]; ; ]; int dep[maxn]; void dfs(int u, int fa…
题意:n个点的树,每个点有权值,问你u~v路径第k小的点的权值是? 思路: 树上主席树就是每个点建一棵权值线段树,具体看JQ博客,LCA用倍增logn求出,具体原理看这里 树上主席树我每个点的存的是点u到源点1的权值线段树,那我求点u到v的所有点,显然是 u + v - lca - fa[lca],就是u到1 + v到1 - 多算的lca - 多算的fa[lca].不能减去两个lca不然少一个点了, LCA板子: //LCA ]; int dep[maxn]; void lca_dfs(int…
倍增lca板子洛谷P3379 #include<cstdio> struct E { int to,next; }e[]; ],anc[][],log2n,deep[],n,m,s,ne; ]; void dfs(int x,int fa) { int i,k; vis[x]=; anc[x][]=fa; deep[x]=deep[fa]+; ;i<=log2n;i++) anc[x][i]=anc[anc[x][i-]][i-]; ;k=e[k].next) if(!vis[e[k].…
LCA目前比较流行的算法主要有tarjian,倍增和树链剖分 1)tarjian 是一种离线算法,需要提前知道所有询问对 算法如下 1.读入所有询问对(u,v),并建好树(建议邻接表) 2.初始化每个节点各属一个并查集,都指向自己 3.对整棵树进行dfs(深度优先搜索)遍历 每处理到一个新节点(u)时看他的另一半(询问对象v)是否visit过,如果visit过了,则这组询问对的lca即v的并查集的根节点,若没有visit过,则继续向下深搜,该节点记为已visit 每当回溯的时候都将子节点的并查集…
板子 ll lg[40]; ll dep[N],fa[N][40]; ll dis[N]; void dfs(ll u,ll f) { dep[u]=dep[f]+1; fa[u][0]=f; for(int i=1;i<=lg[dep[u]];i++) { fa[u][i]=fa[fa[u][i-1]][i-1]; } for(int i=head[u];i;i=next[i]) { ll v=e[i].v; if(v==f)continue; dis[v]=dis[u]+e[i].w; df…
写点流水账放松身心... 10.8 前一天考完NHEEE的一调考试终于可以开始集训了Orz (然后上来考试就迟到5min, GG) T1维护队列瞎贪心, 过了大样例交上去一点也不稳...T出翔只拿了50分... T2看了看似乎维护前缀和用树状数组搞搞比较可做, 爆肝到最后也没肝出来... T3正解玄学十字链表, 然而正解常数太大暴力卡一卡就过了Orz 下午惊喜意外又刺激地发现有了恶心大模拟的专题...爆肝猪国杀然后成功RE QAQ 欢声笑语中打出GG.png 10.9 机房电脑被 $ln$ 给关…
(此处不应有目录) (本来想咕掉这篇游记) Day -1 今天信心题,这个毒瘤出题人怎么出了一堆垃圾题(smallfat批判这个垃圾题). T2,T3是送分题.T1考了个noip根本不会考得类欧几里德算法. 下午敲树链剖分求lca板子,然后发现自己WA了.[内心崩溃.jpg] 有人颓generals.晚上为了练习写模拟,写了一个简化后的generals的交互库.(虽然没写图形界面,因为同学都不会Java,只好写C++) Day 0 上午把我的泰拉1.3借给同学,然后变得一发不可收拾,Emmm..…
传送门:>Here< 题意:询问给出一棵无根树上任意两点$a,b$,求关于所有点$i$,$dist(a,i) = dist(b,i)$的点的数量.要求每一次询问在$O(log n)$的时间复杂度内完成. 解题思路 由于在树上求距离,并且还要$O(log n)$,自然会联想到$LCA$.由于边权是$1$,那么点到根的距离就是该点的深度.这个深度可以在$dfs$预处理的过程中处理完成.那么两个点之间的距离就是两个点到根节点的距离减去两点的LCA到根节点距离的两倍.这个随便yy一下就好了. 得到$a…
友情提示: 这篇题解并没有GJKL,因为我也不会,而且看别人代码也看不懂,而且问学长还不给我讲!hmc:这个题巨麻烦,我只能说balabala.我不学了我退役了啊! A:这傻逼题我从开头wa了四个小时然后我发现我写了各种奇葩东西, 嗯不说了.很明显要么在某线段起点开始要么在某线段终点结束.然后枚举段点二分就行. #include <bits/stdc++.h> using namespace std; typedef long long ll; ; struct Node{ ll l,r,v;…
凛冬将至 Description 维斯特洛大陆的原住民是森林之子,他们长得如孩童一般,善于使用石器,威力值35,用树叶树枝作为衣物,在森林里繁衍生息,与万物和平相处.他们会使用古老的魔法(比如绿之视野),威力值55.后来先民从维斯特洛大陆架登陆,凭借手中的青铜兵器和战马大举入侵,威力值分别是35和55.森林之子凭借魔法顽强抵抗,并冒险利用龙晶制造出了一个神奇的强悍的物种——异鬼,威力值60.双方持久不下之时签订了和平协议,先民占据了维斯特洛大陆,森林之子只保有森林. 七大王国如火如荼兴起之时,在…
题意(CodeForces 588E) 给定一棵\(n\)个点的树,给定\(m\)个人(\(m\le n\))在哪个点上的信息,每个点可以有任意个人:然后给\(q\)个询问,每次问\(u\)到\(v\)上的路径有的点上编号最小的\(k(k \le 10)\)个人(没有那么多人就该有多少人输出多少人). 分析 \(u\)到\(v\)上路径的询问很显然的想到LCA,但是要维护前\(k\)个在路径上的最小的点似乎是个有点麻烦的问题.其实,找到了LCA(设为\(p\)点),我们就可以同样的利用倍增的思想…
Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 30082   Accepted: 15386 Description A rooted tree is a well-known data structure in computer science and engineering. An example is shown below:  In the figure, eac…
[杂文]CSP2019蒟蒻AFO(假)记 [初赛前 N 天] 时间:2019-10-15 今晚 \(2012\) 的初赛题做到心态爆炸,选择考计算机基础知识一脸懵逼,填空和后面一道大模拟直接跳过,最后居然还得了 \(60\) 多分. [初赛] 时间:2019-10-18(day0 前一天) 昨天做了 \(NOIP2016\) \(day1\),原本应该是 \(2s\) 时限的 \(T2\) 老师没注意只开了 \(1s\),然后就被卡掉了 \(5\) 分,今天做 \(day2\) 时又被老掉牙的…
Description [题目描述]: 最近有一场战争发生,Duff是战争里一名士兵,Malek是她的长官. 他们的国家——Andarz Gu有n个城市(编号为1到n),总共有n-1条道路,每条道路连接着不同的两个城市,保证两两城市间必定可以通过道路到达. Andarz Gu总共有m个人,每个人分别对应着编号1到m,对于第i个人,我们可以知道他还有一个编号ci,表示这个编号为i的人住在编号为ci的城市.注意一个城市里可能有不止一个人,也可能没有人住在这个城市. Malek喜欢下达指令,这也是她要…
这是一篇迟来的博客,由于我懒得写文章,本篇以两个问题阐述笔者对树链剖分的初步理解. Q1:树链剖分解决什么问题? 树链剖分,就是把一棵树剖分成若干连续的链,将这些链里的数据映射在线性数组上维护.比方说我们想要维护树上任意两点间的lca,或者支持一段路径或一棵子树的修改和查询,都可以用树链剖分来解决. Q2:树链剖分是什么原理? 以经典的重链剖分为例,列举笔者认为是树剖核心的两个基本数据结构性质: 1.树剖序:树剖所维护的几个基本信息如dfn(时间戳).size(子树大小).fa(树上父亲),在这…
扯在前面 人生第一道黑(>▽< ). 那天听了老师讲图论讲了这道题,发现这道黑题并不是很黑于是就做了做,在同机房dalao的帮助下三个小时做完(太菜了),于是来发篇题解. 正文 题意 给出一张 n 个点 m 条边的无向图,每条边(ai,bi)有一个权值 wi 和费用 ci,表示这条边 每降低 1 的权值需要 ci 的花费.现在一共有 S 费用可以用来降低某些边的权值(可以降到 负数),求图中的一棵权值和最小的生成树并输出方案 分析 本题就是一个求最小生成树加不定边的题目,而且输出多了个方案 题…
T1 考场上先干的T2,最后慌慌张张没去想正解,打算把树建起来,拿70分的部分分,于是写树剖LCA,板子好像忘了,回忆了好久还模拟了好几遍才打对树剖LCA............期望70,结果0.考试结束后一模一样的代码交上去就70,考试的时候全部TLE,玄学............. 斐波那契找性质,推60个数,加前缀和,二分查找,一个一个往上跳. 构造出来的树是个扁树,DEP不深,所以完全可以跳父亲. T2 瞅一眼,莫队?不对,带修的话效率太低. 在看交换位置,平衡树?平衡树还真行,但我觉得…
T1 星际旅行 仔细一看,发现像一个欧拉路(简称一笔画). 满足"可以一笔画"的条件是: 1.所有点都有偶数条连边; 2.有偶数个点连奇数条边; 满足以上两个条件的任意一个即可一笔画. 然而还要保证图的联通性.就是说如果有一个图,有一些点是孤立的,按照题意也是可行的.但是如果图像是两个不同的区域,每个区域的点互不连 这种情况就是假的,直接输出零. 因为双向边,我们不妨把每条边看作有两条.那么满足题目情况有三种: 1.去掉任意两个自环; 2.去掉一个自环和任意一条边; 3.去掉连在一个点…
2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 9280  Solved: 2421[Submit][Status][Discuss] Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始为0,即第一个询问的u是明文.   Input…
首先Tarjan算法的基本思路: 1.任选一个点为根节点,从根节点开始. 2.遍历该点u所有子节点v,并标记这些子节点v已被访问过. 3.若是v还有子节点,继续搜索下去,否则下一步. 4.合并v到u上. 5.寻找与当前点u有询问关系的点v. 6.若是v已经被访问过了,则可以确认u和v的最近公共祖先为v被合并到的父亲节点a. #include <iostream> #include <cstring> #include <cstdio> using namespace s…
简述这几天的LCA 心得: LCA有两种做法:离线 or 在线 先学的离线: 原理博客很多. 我写得两道题,已经模板. HDU:http://acm.hdu.edu.cn/showproblem.php?pid=2586 HDU :http://acm.hdu.edu.cn/showproblem.php?pid=2874 2874; 之前一份板子: #pragma comment(linker, "/STACK:10240000000,10240000000") #include&l…
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每行包含两个正整数x.y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树). 接下来M行每行包含两个正整数a.b,表示询问a结点和b结点的最近公共祖先. 输出格式: 输出包含M行,每行包含一个正整数,依次为每一个询问的结果. 输入输出样例 输入样例#1: 复制 5 5 4 3 1 2 4…
题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每行包含两个正整数x.y,表示x结点和y结点之间有一条直接连接的边(数据保证可以构成树). 接下来M行每行包含两个正整数a.b,表示询问a结点和b结点的最近公共祖先. 输出格式: 输出包含M行,每行包含一个正整数,依次为每一个询问的结果. 输入输出样例 输入样例#1: 复制 5 5 4 3 1 2 4…
过了这么长的时间终于开始看LCA了... 有一次训练题卡在LCA当时不会...拖了好久好久...其实现在还是不会... 只会tarjan... 传送门 板子题咯 tarjan的算法就是基于先序遍历的顺序的 #include <bits/stdc++.h> using namespace std; inline int read() { , f = ; char ch = getchar(); ; ch = getchar(); } + ch - '; ch = getchar(); } ret…
传送门 这真是一道神仙题 虽然我猜到了这是一道LCA的题 但是... 第一遍看题,我是怎么也没想到能和树形图扯上关系 并且用上LCA 但其实其实和上一道lightoj上的那道题很类似 只不过那时一道很裸的板子 这个变了个形 但二分+LCA的思想是没有变的 ---------------------------------------------------------------------------- 为了方便描述,我们把左边的棋子称为a,中间的棋子称为b,右边的为c. 仔细观察跳棋规则,我…