LCA
罗旅洲
Hello World!
展开
-
LCA之树链剖分(模板)
#include#include#include#includeusing namespace std;const int maxx=500010;int be[maxx],ne[maxx*2],to[maxx*2],e=0;int fa[maxx],son[maxx],deep[maxx],size[maxx],jump[maxx];void add(int x,int y){原创 2017-07-18 16:11:25 · 392 阅读 · 0 评论 -
LCA之倍增算法模板
#include#include#include#includeusing namespace std;const int maxx=500010;int be[maxx],ne[maxx*2],to[maxx*2],e=0;int deep[maxx],f[maxx][19],n,q,root,lim;bool p[maxx];void add(int x,int y){ t原创 2017-07-17 15:05:39 · 437 阅读 · 1 评论 -
LCA之ST算法模板
例题:https://www.luogu.org/problem/show?pid=3379#include#include#include#includeusing namespace std;const int maxx=1000010; //双向边数组要开点数的两倍int n,q,root,be[maxx/2],to[maxx],ne[maxx],e=0;int d原创 2017-07-16 16:05:42 · 481 阅读 · 0 评论 -
LCA实现的三种不同的方法
LCA,最近公共祖先,实现有多种不同的方法,在树上的问题中有着广泛的应用,比如说树上的最短路之类。LCA的实现方法有很多,比如RMQ、树链剖分等。今天来讲其中实现较为简单的三种算法:RMQ+时间戳、树上倍增(类似二分步长)、Tarjan算法(DFS+并查集)。【RMQ+时间戳】什么是时间戳?时间戳,就是被访问到的一个次序。比如说我们首先对一棵树进行深搜,在深搜中访问的相应次转载 2017-07-16 09:12:38 · 555 阅读 · 0 评论 -
LCA之tarjan模板
#include#include#include#include#includeusing namespace std;const int maxx=500010;int be[maxx],ne[maxx*2],to[maxx*2],e=0;int bee[maxx],nee[maxx*2],too[maxx*2],w[maxx*2],ee=0;int ans[maxx],fa[原创 2017-07-18 10:19:40 · 304 阅读 · 0 评论 -
NOIP2016天天爱跑步
题目在这题目描述小c同学认为跑步非常有趣,于是决定制作一款叫做《天天爱跑步》的游戏。«天天爱跑步»是一个养成类游戏,需要玩家每天按时上线,完成打卡任务。这个游戏的地图可以看作一一棵包含 nnn个结点和n−1n-1n−1条边的树, 每条边连接两个结点,且任意两个结点存在一条路径互相可达。树上结点编号为从111到nnn的连续正整数。现在有mmm个玩家,第iii个玩家的起点为原创 2017-11-08 20:44:49 · 3687 阅读 · 0 评论