记录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. HTTP GET的VC三种方式

    一.第一种方式(包装类的方式) a.在VC++添加类,选择typelib b.选择文件:C:\Windows\System32\winhttp.dll 选择到右边生成的类,最后点完成,即产生了一个CW ...

  2. django 网站的搭建(1)

    使用 python django 模块来搭建自己的博客网站. 本人环境:阿里云centos7+django1.10+python3.5 使用工具:putty + winscp 1.首先安装python ...

  3. 4.GDscript(2)关键字,运算符,字面量

    (来源godot官方文档) 关键词 下面是该语言支持的关键字列表.由于关键字是保留字(令牌),它们不能用作标识符.操作符(如 in , not , and 或 or )以及下面列出的内置类型的名称也是 ...

  4. hdu5125 树状数组+dp

     hdu5125 他说的是n个人每个人都有两个气球a,b,气球各自都有相应的体积,现在让他们按照序号排列好来,对他们的a气球体积值计算最长上升子序列,对于这整个排列来说有m次机会让你将a气球替换成b气 ...

  5. Java集合-----Map详解

          Map与Collection并列存在.用于保存具有映射关系的数据:Key-Value      Map 中的 key 和  value 都可以是任何引用类型的数据      Map 中的 ...

  6. 关于this指向性的问题

    函数调用 首先需要从函数的调用开始讲起. JS(ES5)里面有三种函数调用形式: func(p1, p2) obj.child.method(p1, p2) func.call(context, p1 ...

  7. python 某个目录下的所有文件列表

    使用os.listdir() 函数来获取某个目录中的文件列表 import os names = os.listdir('somedir') 结果会返回目录中所有文件列表,包括所有文件,子目录,符号链 ...

  8. jQuery懒加载插件jquery.lazyload.js使用说明实例

    jQuery懒加载插件jquery.lazyload.js使用说明实例很多网站都会用到‘图片懒加载’这种方式对网站进行优化,即延迟加载图片或符合某些条件才开始加载图片.懒加载原理:浏览器会自动对页面中 ...

  9. GUI常用对象的属性

    %常用对象的属性 %.figure %hf=figure; %get(hf); %改变颜色 set Color %set(hf,'Color','w'); %去掉默认的菜单 Menubar %set( ...

  10. Centos7 在apache+php7环境下 安装 Discuz!X3.4

    拉取Discuz!X3.4代码 git 地址 : https://gitee.com/ComsenzDiscuz/DiscuzX 在/var/www/html 中新建 bbs 文件夹 将git下upl ...