薛的lca讲课配到题解】的更多相关文章

2.15 LCA Nearest Common Ancestors POJ 1330 题意:给出一棵树, 询问两个点的最近公共祖先. 思路: $LCA$模板题,请各位掏出各式各样的模板A穿它. #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<queue> using namespace std; typedef long long ll…
4月4日,应学弟要求去了次学校给小同学们讲了一堂课,其实讲的挺内容挺杂的,但是目的是引出LCA算法. 现在整理一下当天讲课的主要内容: 开始并没有直接引出LCA问题,而是讲了RMQ(Range Minimum/Maximum Query)问题. RMQ指的是对于给定的一个数组,每一次询问一个区间[L,R]中数字的最小或最大值,一个很经典的问题. 一开始没有学生知道如何求解此问题.我将问题弱化,每一次询问[1,R]中数字的最值,有学生打出了求一个min/max数组即可,此为正解. 这是一个相当正确…
刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <…
Distance Queries [题目链接]Distance Queries [题目类型]LCA Tarjan法 &题意: 输入n和m,表示n个点m条边,下面m行是边的信息,两端点和权,后面的那个字母无视掉,没用的.接着k,下面k个询问lca,输出即可 &题解: 首先看的这个 http://www.cnblogs.com/JVxie/p/4854719.html 大致懂了方法,之后又找了这个代码 http://blog.csdn.net/lianai911/article/details…
一种特殊的枚举算法 什么是倍增 顾名思义,即每一次翻倍增加.那么,这样我们就有了一种$O(logn)$阶的方法处理枚举方面的问题了. 参考:[白话系列]倍增算法 一些题目 [倍增]luoguP1613 跑路 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十分牛B的空间跑路器,每秒钟可以跑2^k千米(k是任意自然数).当然,这个机器是用longint存的,所以总跑路长度不能…
题目大意 有一棵有\(n\)(\(n\leq5*10^4\))个点的树,\(q\)(\(q\leq5*10^4\))次询问,每次给出\(l,r,x\)表示询问所有编号在\([l,r]\)的点与点\(x\)的LCA的深度之和 题解 将\([l,r]\)里每个点和该点的所有祖先点权+1后,查询点\(x\)和它的祖先的点权和就行了 可持久化线段树维护 代码 #include<algorithm> #include<cmath> #include<cstdio> #includ…
A: Little Sub and Pascal's Triangle Solved. 题意: 求杨辉三角第n行奇数个数 思路: 薛聚聚说找规律,16说Lucas 答案是 $2^p \;\;p 为 n - 1 中 以2进制表示下1的个数$ 证明 $Ans = \sum\limits_0^n C_n^i \;\%\; 2 = \sum\limits_0^n C_{\frac{n}{2}}^{\frac{i}{2}} \cdot C_{n\;\%\;2}^{i\;\%\;2}$ 我们考虑 $C_{n…
更新完了? ghj1222这个智障因为NOIP考的太菜没有去THUWC和PKUWC,但是NOIWC还是苟进去了 由于已经结束了,好多事实忘了,所以可能不完整 2019/1/23 Wednesday 明天该走了,早上买了两桶泡面,是有点小兴奋,之前没坐过飞机虽然说我想坐火车去,火车上可以透彻啊 要是按照姓氏分宿舍就要被rqy大佬虐了 晚上Virtual participation Codeforces Round #530 (Div. 2),Div2题不难,110分钟AK,掉rp,感觉WC要凉 这…
题目: Given the root and two nodes in a Binary Tree. Find the lowest common ancestor(LCA) of the two nodes. The lowest common ancestor is the node with largest depth which is the ancestor of both nodes. Example For the following binary tree: 4 / \ 3 7…
比赛链接 由于 \(\texttt{Sweet Round}\) 比赛挺好的(关键不知道为啥\(Unrated\) 开篇总结(大雾):这次比赛题目不错(有思维含量) 尽管我不会做. 我一看 \(T1\) ,啊这什么水题(当我没说). 随便写了个高精度(没想到还 \(WA\) 了一次) 结果就 \(AC\) 了! Dev-c++:那你还调试那么多次 盲猜了下 \(T2\). 随便打个暴力得了 \(15pts\). (还不是暴力) 结果突然想起 \(T3\) 没写.(废话)回头写了下,没想到部分分根…
Code[VS] 2370 小机房的树 题解 RMQ 树链剖分 题目描述 Description 小机房有棵焕狗种的树,树上有N个节点,节点标号为0到N-1,有两只虫子名叫飘狗和大吉狗,分居在两个不同的节点上.有一天,他们想爬到一个节点上去搞基,但是作为两只虫子,他们不想花费太多精力.已知从某个节点爬到其父亲节点要花费 c 的能量(从父亲节点爬到此节点也相同),他们想找出一条花费精力最短的路,以使得搞基的时候精力旺盛,他们找到你要你设计一个程序来找到这条路,要求你告诉他们最少需要花费多少精力 输…
心得: 这比赛真的是不要不要的,pending了一下午,也不知道对错,直接做过去就是了,也没有管太多! Problem A: 两只老虎 Description 来,我们先来放松下,听听儿歌,一起“唱”. 两只老虎两只老虎,跑得快跑得快. 一只没有耳朵,一只没有尾巴. 真奇怪,真奇怪. Tmk也觉得很奇怪,因为在他面前突然出现了一群这样的老虎,有的没耳朵,有的没尾巴,不过也有正常的. 现在Tmk告诉你这群老虎的耳朵个数,尾巴条数,以及老虎的腿的数目,问你有多少只是正常的. 其中只有三种老虎: 第一…
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵包含 nn个结点和 n-1n−1条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达.树上结点编号为从11到nn的连续正整数. 现在有mm个玩家,第ii个玩家的起点为 S_iS​i​​,终点为 T_iT​i​​ .每天打卡任务开始时,所有玩家在第00秒同时从自己的起点出发, 以每秒跑一条边的速度, 不间断地…
刚学了LCA,写篇题解巩固一下 首先题目有误: (A是否是男生 )xor( B是否是男生)=A和B是否能够成为情侣,这句话显然是错误的qwq 对于这道题,容易看出,对于待处理的两个点,只要我们找到他的最近公共祖先,问题便游刃而解了 所以我的思路就是:lca+xor前缀和 这是我的大法师函数 yihuo数组就是保存当前节点到根节点的xor值 推算了一下,对于xor前缀和有: 两个点x,y间的的xor值=yihuo[x]^yihuo[y] void dfs(int f,int father,int…
Nearest Common Ancestors Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19728   Accepted: 10460 Description A rooted tree is a well-known data structure in computer science and engineering. An example is shown below:    In the figure, e…
题意: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…
原题传送门 这题用Link-Cut-Tree解决,Link-Cut-Tree详解 这道题的难点就在如何求LCA: 我们珂以先对其中一个点进行access操作,然后对另一个点进行access操作,因为LCA到根的边一定都由第一次access变为实边了,在之后的这一次access操作的最后一条从虚边变为实边的边的父亲就是两点的LCA 回求LCA后,剩下的几乎是模板,但有两种做法 1.建立虚拟点n+1,保证一直是一颗有n+1个点的树,写起来比较无脑(lct部分珂以复制),常数比较大 #include…
懒得复制,戳我戳我 Solution: 这题思路很神奇,首先你要知道这个毁灭树是怎么保证实现的:一句话就是如果该节点要被破坏,他的所有父节点就要被破坏,也就只要所有父节点的LCA被破坏就可以,所以我们就只用把这个点直接连向LCA.每个点都这么处理,最后面就是留下的一棵毁灭树,也就是\(i\)节点破坏后,它的子树都一定会被破坏 上面这一点的详解戳我 然后就是拓扑序的应用,我们读入并储存的是\(i\)节点连向的那些边,(没有连出的边的节点连向\(0\),不能连向自己,后面解释)然后拓扑排序,这是处理…
题意:给你一个无向图,有q次操作,每次连接两个点,问你每次操作后有几个桥 思路:我们先用tarjan求出所有的桥,同时我们可以用并查集缩点,fa表示缩点后的编号,还要记录每个节点父节点pre.我们知道,缩点后形成一棵树,所有边都是桥,连接两点必会成环,环上任意边都不是桥.所以连点后,我们把两个点一步一步往上走,如果往上走之后发现fa不一样,说明走过了一条桥,那么合并fa,桥数量-1. 代码: #include<set> #include<map> #include<stack…
本题也是找LCA的题目,只是要求多次查询.一般的暴力查询就必定超时了,故此必须使用更高级的方法,这里使用Tarjan算法. 本题处理Tarjan算法,似乎输入处理也挺麻烦的. 注意: 由于查询的数据会极大,故此使用一个数组记录全部查询数据就会超时的. 我就载在这里了.查了好久才想到这点. 由于我使用了一个vector容器记录了查询数据.故此每次都循环这组这么大的数据,就超时了. ----解决的方法:使用一个vector<int> quest来记录查询数组.这样每次都仅仅须要循环某节点的邻接查询…
洛谷P1967:https://www.luogu.org/problemnew/show/P1967 思路 感觉2013年D1T3并不是非常难 但是蒟蒻还是WA了一次 从题目描述中看出每个点之间有许多条路径 而我们需要的是找出整条路径中最大的最小可通过量 一开始看到题目会想到是不是最大流问题 但是仔细一想其实并不用那么麻烦 我们只需要用kruscal找出最大生成树即可(因为多条路径中只要挑出最大的即可) 然后在重构树上考虑怎么取到两点之间的最小值 我们发现图是一个或者是多个树(没有考虑WA了一…
洛谷P4281:https://www.luogu.org/problemnew/show/P4281 思路 答案所在的点必定是三个人所在点之间路径上的一点 本蒟蒻一开始的想法是:先求出2个点之间的LCA 再求出此LCA和第3个点的LCA 但是没有考虑到有可能答案所在点可能比2个点之间的LCA深度更深 因为两点之间的LCA是两点共同能到达的深度最浅的一个点 所以我们可以考虑: 设a=LCA(x,y) 此时x和y到a点为最小花费 则此时z到a的花费可以用LCA(a,z)来计算 因此我们分别计算3种…
洛谷P4180:https://www.luogu.org/problemnew/show/P4180 前言 这可以说是本蒟蒻打过最长的代码了 思路 先求出此图中的最小生成树 权值为tot 我们称这棵树中的n-1条边为“树边” 其他m-n+1条边为“非树边” 枚举每条非树边(x,y,z)添加到最小生成树中 可以在x,y之间构成一个环 设x,y之间的路径最大值为val1 次大值为val2(val1>val2) 则有以下两种情况 当z>val1时 则把val1对应的边换成(x,y,z) 得到一个候…
POJ3417:http://poj.org/problem?id=3417 思路 我们注意到由“主要边”构成一颗树 “附加边”则是非树边 把一条附加边(x,y)加入树中 会与树上x,y之间构成一个环 因此 我们称每条附加边(x,y)都把树上x,y之间的路径覆盖一次 我们只需要统计出每条“主要边”被覆盖几次 有以下几种情况 第一步把覆盖0次的主要边切断 则第二步可以任意切一条附加边 ans+=m 第一步把覆盖1次的主要边切断 则第二步只有一种选择切附加边 ans+=1 第一步把覆盖2次或以上的主…
http://poj.org/problem?id=2826 题目大意:给两条线,让它接竖直下的雨,问其能装多少横截面积的雨. ———————————————————————————— 水题,看题目即可知道. 但是细节是真的多……不过好在两次AC应该没算被坑的很惨(全程没查题解). 推荐交之前看一下讨论版的数据,方便一次AC(我第一次就是作死直接交了结果我自己都想好的情况忘了写了……) 相信看到这篇题解的人都看过题了,那么先说细节: 1.C++提交(G++不知道为什么WA了……) 2.精度 3.…
http://www.lydsy.com/JudgeOnline/problem.php?id=1043 Description 有n个圆盘从天而降,后面落下的可以盖住前面的.求最后形成的封闭区域的周长.看下面这副图, 所有的红 色线条的总长度即为所求. Input 第一行为1个整数n,N<=1000 接下来n行每行3个实数,ri,xi,yi,表示下落时第i个圆盘的半径和圆心坐标. Output 最后的周长,保留三位小数 Sample Input 2 1 0 0 1 1 0 Sample Out…
题目:传送门 这道题根本不用lca,也没有部分分... 考虑求两个点xy的lca的深度. 我们将x到树根所有点的值都加1,然后查询y到根的和,其实就是lca的深度. 所以本题离线一下上树剖乱搞就可以了. AC代码如下:718ms 17348Kib #include <iostream> #include <cstdio> #include <vector> #include <algorithm> using namespace std; namespace…
题目描述 N个点,形成一个树状结构.有M次发放,每次选择两个点x,y对于x到y的路径上(含x,y)每个点发一袋Z类型的物品.完成所有发放后,每个点存放最多的是哪种物品. 输入格式 第一行数字N,M接下来N-1行,每行两个数字a,b,表示a与b间有一条边再接下来M行,每行三个数字x,y,z.如题 输出格式 输出有N行每i行的数字表示第i个点存放最多的物品是哪一种,如果有多种物品的数量一样,输出编号最小的.如果某个点没有物品则输出0 ---------------------------------…
前言:其实就是主席树板子啦……只不过变成了树上的查询 -------------------------- 题目链接 题目大意:求树上$u$到$v$路径第$k$大数. 查询静态区间第$k$大肯定是用主席树.我们知道主席树有着优秀的性质:对于前缀和和树上差分等操作都是满足的.感性理解一下:我们在打主席树板子的时候,每次查询都是$query(rt[l-1],rt[r],1,len,k)$,然后$k$与$sum[ls[r]]-sum[ls[l-1]]$比较.所以在进行树上的询问时,我们只要把板子的操作…
题目链接 题目大意:给定一颗含有$n$个结点的树,每个结点有一个权值$w$.给定$m$条路径,如果一个点与路径的起点的距离恰好为$w$,那么$ans[i]++$.求所有结点的ans. 题目分析 暴力的做法当然是枚举条路径,然后玄学$dfs$,复杂度应该是$O(nm)$的.再根据约束条件可以拿到65pts. 正解 对于一条路径$(u,v)$,我们可以将其分成两段:$(u,lca(u,v))$和$(lca(u,v),v)$. 我们先来分析上行路段.上行路段的要求有3个: 1.$u$在以$i$为根的子…