tarjan求lca  就是dfs序中用并查集维护下,当访问到询问的第二个点u的时候  lca就是第一点的find(fa[v])

fa[v] = u; // 当v为u的儿子 且 v已经dfs完毕

#include <bits/stdc++.h>
using namespace std;
const int N = 2e5+; struct node {
int to;
int nxt;
int lca;
}E[N]; int n, cnt, tot, fa[N], vis[N];
map<string ,int> mp;
string s[N], s1, s2;
vector<int> son[N];
int head[N], ans[N];
void add_edge(int u,int v)
{
++tot;
E[tot].to = v;
E[tot].nxt = head[u];
head[u] = tot;
} void init()
{
for(int i=; i<N; i++)
fa[i] = i;
} int fi(int x)
{
return fa[x] == x ? x : fa[x] = fi(fa[x]);
} int getId(string str)
{
if(mp[str]) {
return mp[str];
}
mp[str] = (++cnt);
s[cnt] = str;
return cnt;
} void dfs(int u)
{
for(int i=; i<son[u].size(); i++) {
int v = son[u][i];
if(vis[v]) continue;
dfs(v);
fa[v] = u;
}
vis[u] = true;
for(int i=head[u]; i!=; i=E[i].nxt) {
int v = E[i].to;
if(!vis[v]) continue;
if(i%) {
E[i].lca = fi(v);
E[i+].lca = E[i].lca;
}
else {
E[i].lca = fi(v);
E[i-].lca = E[i].lca;
}
}
} int main()
{
freopen("in.txt","r",stdin);
init();
int n; scanf("%d", &n);
for(int i=; i<n; i++) {
cin >> s1 >> s2;
int u = getId(s1);
int v = getId(s2);
son[u].push_back(v);
}
int m; scanf("%d", &m);
for(int i=; i<m; i++) {
cin >> s1 >> s2;
int u = getId(s1);
int v = getId(s2);
add_edge(u,v);
add_edge(v,u);
}
dfs();
for(int i=;i<=m;i++) {
cout << s[E[i*].lca] <<endl;
}
return ;
}

hihoCoder week15 最近公共祖先·二的更多相关文章

  1. hihoCoder #1067 : 最近公共祖先·二 [ 离线LCA tarjan ]

    传送门: #1067 : 最近公共祖先·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上上回说到,小Hi和小Ho用非常拙劣——或者说粗糙的手段山寨出了一个神奇的网站 ...

  2. Hihocoder #1067 : 最近公共祖先·二

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上上回说到,小Hi和小Ho用非常拙劣——或者说粗糙的手段山寨出了一个神奇的网站,这个网站可以计算出某两个人的所有共同祖先中 ...

  3. HihoCoder 1067 最近公共祖先(ST离线算法)

    最近公共祖先·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上上回说到,小Hi和小Ho用非常拙劣——或者说粗糙的手段山寨出了一个神奇的网站,这个网站可以计算出某两个 ...

  4. hihocoder1067 最近公共祖先·二(tarjin算法)(并查集)

    #1067 : 最近公共祖先·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上上回说到,小Hi和小Ho用非常拙劣——或者说粗糙的手段山寨出了一个神奇的网站,这个网站 ...

  5. 【HIHOCODER 1067】最近公共祖先·二(LCA)

    描述 上上回说到,小Hi和小Ho用非常拙劣--或者说粗糙的手段山寨出了一个神奇的网站,这个网站可以计算出某两个人的所有共同祖先中辈分最低的一个是谁.远在美国的他们利用了一些奇妙的技术获得了国内许多人的 ...

  6. 学习LCA( 最近公共祖先·二)

    http://poj.org/problem?id=1986 离线找u,v之间的最小距离(理解推荐) #include<iostream> #include<cstring> ...

  7. hihocoder #1062 : 最近公共祖先·一(小数据量 map+set模拟+标记检查 *【模板】思路 )

    #1062 : 最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在 ...

  8. hihoCoder 1062 最近公共祖先·一 最详细的解题报告

    题目来源:最近公共祖先·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 题目描述 小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其 ...

  9. 【hihoCoder第十五周】最近公共祖先·二

    老实说我没有读题,看见标题直接就写了,毕竟hiho上面都是裸的算法演练. 大概看了下输入输出,套着bin神的模板,做了个正反map映射,但是怎么都得不了满分.等这周结束后,找高人询问下trick. 若 ...

随机推荐

  1. Redis Cluster(集群)的搭建

    一.Redis的下载.安装.启动(单实例) 我们统一将Redis安装在/opt目录下,执行命令如下: $ cd /opt $ wget http://download.redis.io/release ...

  2. html5-嵌入图片

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  3. I Count Tow Three

    #include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#inclu ...

  4. Maven的配置指南

    Maven的配置指南  配置Maven Maven配置发生在3个级别: 项目 - 大多数静态配置发生在pom.xml中 安装 - 这是Maven安装时发生的一次性的配置过程 用户 - 这是Maven提 ...

  5. css选择问题

    <div class="col-lg-4 col-md-6 mb-4"> <div class="card"> <a href=& ...

  6. 【Hadoop学习之二】Hadoop伪分布式安装

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4       jdk8       hadoop-3.1.1 伪分布式就 ...

  7. spring4.0.0 源码导入eclipse(sts)

    其余步骤请见:http://www.cnblogs.com/xiluhua/p/7450972.html 执行 gradle eclipse -x :eclipse 报错: 解决办法: 找到 行,注释 ...

  8. nodejs核心技术

    一.知识结构: http模块:配置简单 的web服务,npm/cnpm工具 express框架:express中间件进行服务配置:路由:请求处理: DB服务:学习使用mysql关系型数据库: web接 ...

  9. Codeforces 268B - Buttons

    Manao is trying to open a rather challenging lock. The lock has n buttons on it and to open it, you ...

  10. CentOS7 重启网卡Failed to start LSB: Bring up/down networking.解决方法

    环境:MAC PD虚拟机安装centos7 修改完网卡配置,重启网络服务报错 使用提示命令查看:systemctl status network.service 发现报错为Failed to star ...