洛谷 3379 最近公共祖先(LCA 倍增)
来源:互联网 发布:nginx lua 写入txt 编辑:程序博客网 时间:2024/06/05 06:39
洛谷 3379 最近公共祖先(LCA 倍增)
题意分析
裸的板子题,但是注意这题n上限50w,我用的边表,所以要开到100w才能过,一开始re了两发,发现这个问题了。
代码总览
#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#define nmax 1000100#define demen 21using namespace std;int fa[nmax][demen],dis[nmax],head[nmax],dep[nmax];int n,m,tot = 0;struct node{ int to; int next; int w;}edge[nmax];void add(int u, int v){ edge[tot].to = v; edge[tot].next = head[u]; head[u] = tot++;}void dfs(int rt,int f){ fa[rt][0] = f; for(int i = 1;i<=20;++i){ fa[rt][i] = fa[fa[rt][i-1]][i-1]; } for(int i = head[rt];i!=-1;i = edge[i].next){ int nxt = edge[i].to; if(nxt != f){ dep[nxt] = dep[rt] + 1; dfs(nxt,rt); } }}int lca(int x, int y){ int X = x,Y=y; if(dep[x] < dep[y]) swap(x,y); int dre = dep[x] - dep[y]; for(int i = 20;i>=0;--i){ if((1<<i) & dre) x = fa[x][i]; } if(x == y) return(x); for(int i = 20;i>=0;--i){ if(fa[x][i] != fa[y][i]){ x = fa[x][i],y = fa[y][i]; } } return(fa[x][0]);}void init(){ memset(fa,0,sizeof fa); memset(head,-1,sizeof head); memset(dep,0,sizeof dep); tot = 0;}int main(){ init(); int n,m,k,u,v,w,root = 0; scanf("%d %d %d",&n,&k,&root); for(int i = 0;i<n-1;++i){ scanf("%d %d",&u,&v); add(u,v); add(v,u); } dep[root] = 1; dfs(root,0); int ans = 0; for(int i = 0;i<k;++i){ scanf("%d %d",&u,&v); printf("%d\n",lca(u,v)); } return 0;}
阅读全文
0 0
- 洛谷 3379 最近公共祖先(LCA 倍增)
- 最近公共祖先(LCA)---倍增法
- 最近公共祖先(LCA):倍增
- 【讲解+模板】最近公共祖先(LCA)(倍增)
- LCA最近公共祖先(朴素+倍增法)
- 最近公共祖先(LCA):tarjan与倍增
- 树上倍增求LCA(最近公共祖先)
- lca(最近公共祖先)倍增模板【pascal】
- LCA(最近公共祖先)倍增法模板及总结
- lca最近公共祖先(st表/倍增)
- LCA(最近公共祖先)倍增法实现
- 倍增法求最近公共祖先(LCA)
- 最近公共祖先(LCA)及其倍增算法实现
- 最近公共祖先(LCA)之树上倍增法
- c++最近公共祖先LCA(倍增算法和tarjan)
- 倍增LCA(最近公共祖先)算法详解
- luogu3379 最近公共祖先(LCA) tarjan 倍增
- 最近公共祖先LCA(Tarjan与DFS--ST倍增)
- 数据结构之链表(四)
- Parenthesis CSU
- CodeForces
- 一步一步的搭建Tomcat服务器 + servlet + android客户端
- debug查看dos加载汇编源程序到内存过程分析
- 洛谷 3379 最近公共祖先(LCA 倍增)
- RecyclerView下划线
- 怎么压缩解压打包文件???
- POJ
- 构造数据类型struct,共用体union,枚举类型enum,宏#define的区别
- idea安装配置SVN
- document.getElementsByClassName的封装,兼容ie8
- 【HPU 1414: Kick Ass】
- Java基础22