倍增lca
Loi_whales
生活不止眼前的苟且,还有诗和远方的田野
展开
-
1036 商务旅行
直接放代码了,练习倍增#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int n,m,q,cnt,tot,deep[30001],head[30001],fa[30001][17]; bool vis[30001]; struct e { int ne原创 2016-10-25 19:31:30 · 349 阅读 · 0 评论 -
倍增lca学习笔记(codevs2370小机房的树题解)
lca即为最近公共祖先,求两个点的lca有两种方法,一是暴力求解,二是倍增求解。 这里主要讲倍增求解lca,时间复杂度nlogn。 主要思想: 首先用一个数组anc[u][i]表示从u节点跳2^i步到得位置,deep[]表示深度 关于anc数组有一个递推公式:anc[u][i] = anc[anc[u][i-1]][i-1]; 这个公式就是先从u点跳2^i-1步再从anc[u][i-1]这个原创 2017-07-16 15:13:05 · 326 阅读 · 0 评论 -
poj1330Nearest Common Ancestors(暴力与倍增)
这道题的意思就是,给你一棵树,再从中取出任意两个节点,让你找他们的最近公共祖先,一个很裸地题,当倍增入门题不错。由于数据比较水,暴力也能A//暴力做法 #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int fa[100005]; bool vis[1原创 2016-10-25 17:00:15 · 102 阅读 · 0 评论