记录dfs序列,dfn[tot] 记录第tot次访问的节点

然后查两点在dfs序中出现的第一次 id[u] id[v]

然后  找 dep[k] = min( dep[i] ) {i 属于 [id[u], id[v]]}

最后dfn[k] 就是所求..

感觉弄来弄去 就是 在映射... 无非就是 求一段序列深度最小的节点编号

#include <bits/stdc++.h>
using namespace std; const int N = 2e5+; int n, cnt, tot, dp[N][]; // dp[i][j] [i, i+(1<<j)-1]
vector<int> G[N]; map<string ,int> mp;
string s1,s2,s[N]; int dfn[N], id[N], dep[N];
int getId(string str)
{
if(mp[str])
return mp[str];
mp[str] = ++cnt;
s[cnt] = str;
return cnt;
} void dfs(int u,int fa,int d)
{
id[u] = tot;
dfn[tot] = u;
dep[tot++] = d; for(int i=; i<G[u].size(); i++) {
int v = G[u][i];
dfs(v, u, d+);
dfn[tot] = u;
dep[tot++] = d;
}
return ;
} void st_init(int sz)
{
for(int i=; i<=sz; i++)
dp[i][] = i;
for(int j=; (<<j)<=sz; j++)
{
for(int i=; i+(<<j)-<=sz; i++)
{
int x = dp[i][j-];
int y = dp[i+(<<(j-))][j-];
if(dep[x] < dep[y])
dp[i][j] = x;
else
dp[i][j] = y;
}
}
} void init()
{
tot = ;
dfs(, , );
st_init(tot-);
} int query(int u,int v)
{
u = id[u], v = id[v];
if(v < u)
swap(v,u);
int t = log2(v-u+);
int x = dp[u][t];
int y = dp[v-(<<t)+][t];
if(dep[x] < dep[y])
return x;
else
return y;
}
int main()
{
freopen("in.txt","r",stdin);
ios::sync_with_stdio();
cin >> n;
for(int i=; i<n; i++) {
cin >> s1 >> s2;
int u = getId(s1);
int v = getId(s2);
G[u].push_back(v);
}
init();
int m; cin >> m;
for(int i=; i<m; i++) {
cin >> s1 >> s2;
int u = getId(s1);
int v = getId(s2);
int x = dfn[query(u,v)];
cout << s[x] <<"\n";
}
return ;
}

hihoCoder week17 最近公共祖先·三 lca st表的更多相关文章

  1. hihoCoder#1069 最近公共祖先·三

    原题地址 根据提示用Spase Table做 将Tree先展成List,因为数组长度等于边数的2倍,树中边数等于节点数-1,所以List数组只要开2倍节点数大小即可 WA了几次,原来是查询的时候出现左 ...

  2. 最近公共祖先问题 LCA

    2018-03-10 18:04:55 在图论和计算机科学中,最近公共祖先,LCA(Lowest Common Ancestor)是指在一个树或者有向无环图中同时拥有v和w作为后代的最深的节点. 计算 ...

  3. 「LuoguP3379」 【模板】最近公共祖先(LCA)

    题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询问的个数和树根结点的序号. 接下来N-1行每 ...

  4. 洛谷P3379 【模板】最近公共祖先(LCA)

    P3379 [模板]最近公共祖先(LCA) 152通过 532提交 题目提供者HansBug 标签 难度普及+/提高 提交  讨论  题解 最新讨论 为什么还是超时.... 倍增怎么70!!题解好像有 ...

  5. 最近公共祖先:LCA及其用倍增实现 +POJ1986

    Q:为什么我在有些地方看到的是最小公共祖先? A:最小公共祖先是LCA(Least Common Ancestor)的英文直译,最小公共祖先与最近公共祖先只是叫法不同. Q:什么是最近公共祖先(LCA ...

  6. P3379 【模板】最近公共祖先(LCA)

    P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...

  7. 洛谷P3379 【模板】最近公共祖先(LCA)(dfs序+倍增)

    P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...

  8. 洛谷——P3379 【模板】最近公共祖先(LCA)

    P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...

  9. 【原创】洛谷 LUOGU P3379 【模板】最近公共祖先(LCA) -> 倍增

    P3379 [模板]最近公共祖先(LCA) 题目描述 如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 输入输出格式 输入格式: 第一行包含三个正整数N.M.S,分别表示树的结点个数.询 ...

随机推荐

  1. SQLSetConnectAttr

    SQLSetConnectAttr 函数定义: 用法类似于SQLSetEnvAttr,该函数是设置连接的各项属性用的 SQLRETURN SQLSetConnectAttr( SQLHDBC      ...

  2. 准备dbcp2-2.1.1和pool2-2.4.2 、commons-dbcp-1.4jar包

    下载地址:https://pan.baidu.com/s/1gtcW36Lz6Yt-j9WlTu31Pw

  3. 排序(Sort)-----冒泡排序

    声明:文中动画转载自https://blog.csdn.net/qq_34374664/article/details/79545940    1.冒泡排序简介 冒泡排序(Bubble Sort),又 ...

  4. Factory Method

    Question:Based on the previous article,what could you do if we must add an extra  function? For exam ...

  5. Locust 分布式测试

    转:http://www.testclass.net/locust/distributed/ 参考:官方文档 分布式运行Locust 一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器 ...

  6. golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息

    golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...

  7. linux centos6.5 php5.6 安装PHPUnit 5.2.9 (转)

    转自:http://blog.csdn.net/shancunxiaoyazhi/article/details/50765293 操作系统版本:CentOS6.5 PHP版本:5.6 下载phpun ...

  8. 大数据自学5-Python操作Hbase

    在Hue环境中本身是可以直接操作Hbase数据库的,但是公司的环境不知道什么原因一直提示"Api Error:timed out",进度条一直在跑,却显示不出表. 但是在CDH后台 ...

  9. 从源码层面聊聊面试问烂了的 Spring AOP与SpringMVC

    Spring AOP ,SpringMVC ,这两个应该是国内面试必问题,网上有很多答案,其实背背就可以.但今天笔者带大家一起深入浅出源码,看看他的原理.以期让印象更加深刻,面试的时候游刃有余. Sp ...

  10. Java程序员秋招面经大合集(BAT美团网易小米华为中兴等)

    Cvte提前批 阿里内推 便利蜂内推 小米内推 金山wps内推 多益网络 拼多多学霸批 搜狗校招 涂鸦移动 中国电信it研发中心 中兴 华为 苏宁内推 美团内推 百度 腾讯 招商银行信用卡 招银网络科 ...