比较直接。

#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 99999999
#define ll __int64
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define mod 1000000007
using namespace std;
const int MAXN = ;
struct node
{
int to;
int next;
}edge[MAXN*];
struct Node
{
int to;
int lca;
int num;
int next;
}a[MAXN*];
int pa[MAXN],ac[MAXN],pre[MAXN],vis[MAXN],ind,num[MAXN],ind1,pre1[MAXN],in[MAXN];
int n,m,lca[MAXN];
string s1[MAXN],s2[MAXN];
map<string,int>mp;
void add(int x,int y)
{
edge[ind].to = y;
edge[ind].next = pre[x];
pre[x] = ind ++;
}
void Add(int x,int y,int num)
{
a[ind1].num = num;
a[ind1].to = y;
a[ind1].next = pre1[x];
pre1[x] = ind1 ++;
}
int find(int x)
{
if(x != pa[x])
pa[x] =find(pa[x]);
return pa[x];
}
void dfs(int rt,int d)
{
int i;
vis[rt] = ;
ac[rt] = rt;
num[rt] = d;
for(i=pre[rt]; i!=-; i=edge[i].next){
int t = edge[i].to;
if(!vis[t]){
dfs(t,d+);
int fx = find(rt);
int fy = find(t);
if(fx != fy){
pa[fy] = fx;
ac[t] = fx;
}
}
}
for(i=pre1[rt]; i!=-; i=a[i].next){
int t = a[i].to;
if(vis[t]){
int fp = ac[find(t)];
a[i].lca = fp;
a[i^].lca = fp;
lca[a[i].num] = fp;
}
}
}
int main()
{
int i,t,cnt;
cin>>t;
while(t--)
{
cnt = ;
ind = ;
memset(pre,-,sizeof(pre));
memset(ac,,sizeof());
memset(in,,sizeof(in));
scanf("%d%d",&n,&m);
for(i=; i<=n; i++){
pa[i] = i;
num[i] = ;
}
mp.clear();
for(i=; i<n; i++){
string ss1,ss2;
cin>>ss1>>ss2;
if(!mp[ss1])
mp[ss1] = ++cnt;
if(!mp[ss2])
mp[ss2] = ++cnt;
add(mp[ss2],mp[ss1]);
add(mp[ss1],mp[ss2]);
in[mp[ss1]]++;
}
ind1 = ;
memset(pre1,-,sizeof(pre1));
memset(vis,,sizeof(vis));
for(i=; i<=m; i++){
cin>>s1[i]>>s2[i];
Add(mp[s1[i]],mp[s2[i]],i);
Add(mp[s2[i]],mp[s1[i]],i);
}
for(i=; i<=cnt; i++){
if(!in[i]){
break;
}
}
dfs(i,);
for(i=; i<=m; i++){
int ans = ;
ans = num[mp[s1[i]]] - num[lca[i]];
if(lca[i] != mp[s2[i]])
ans++;
if(mp[s1[i]] == mp[s2[i]]){
ans = ;
}
cout<<ans<<endl;
}
}
return ;
}

hdu4547 lca tarjan的更多相关文章

  1. HDU 2874 Connections between cities(LCA Tarjan)

    Connections between cities [题目链接]Connections between cities [题目类型]LCA Tarjan &题意: 输入一个森林,总节点不超过N ...

  2. POJ 1986 Distance Queries(LCA Tarjan法)

    Distance Queries [题目链接]Distance Queries [题目类型]LCA Tarjan法 &题意: 输入n和m,表示n个点m条边,下面m行是边的信息,两端点和权,后面 ...

  3. LCA Tarjan方法

    LCA Tarjan方法 不得不说,高中生好厉害,OI大佬,感觉上个大学好憋屈啊! 说多了都是眼泪 链接拿去:http://www.cnblogs.com/JVxie/p/4854719.html

  4. LCA tarjan+并查集POJ1470

    LCA tarjan+并查集POJ1470 https://www.cnblogs.com/JVxie/p/4854719.html 不错的一篇博客啊,让我觉得LCA这么高大上的算法不是很难啊,嘻嘻嘻 ...

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

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

  6. LA 5061 LCA tarjan 算法

    题目大意: 给定所有点的权值都为0,给定一棵树以后,每次询问都要求给定两点 x , y 和一个权值w,要求x,y路径上所有点权值加上w,最后求出每一个节点的值 这里因为查询和点都特别多,所以希望能最后 ...

  7. [CF 191C]Fools and Roads[LCA Tarjan算法][LCA 与 RMQ问题的转化][LCA ST算法]

    参考: 1. 郭华阳 - 算法合集之<RMQ与LCA问题>. 讲得很清楚! 2. http://www.cnblogs.com/lazycal/archive/2012/08/11/263 ...

  8. 最近公共祖先LCA(Tarjan算法)的思考和算法实现

    LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了f ...

  9. POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)

    题目链接:http://poj.org/problem?id=1330 题意:给定一个n个节点的有根树,以及树中的两个节点u,v,求u,v的最近公共祖先. 数据范围:n [2, 10000] 思路:从 ...

随机推荐

  1. 分享一个解决MySQL写入中文乱码的方法

    分享一个解决MySQL写入中文乱码的方法 之前有发帖请教过如何解决MySQL写入中文乱码的问题.但没人会,或者是会的人不想回答.搜索网上的答案并尝试很多次无效,所以当时就因为这个乱码问题搁浅了一个软件 ...

  2. HDU 4121 Xiangqi --模拟

    题意: 给一个象棋局势,问黑棋是否死棋了,黑棋只有一个将,红棋可能有2~7个棋,分别可能是车,马,炮以及帅. 解法: 开始写法是对每个棋子,都处理处他能吃的地方,赋为-1,然后判断将能不能走到非-1的 ...

  3. 2014 Super Training #10 G Nostop --矩阵快速幂

    原题: FZU 2173 http://acm.fzu.edu.cn/problem.php?pid=2173 一开始看到这个题毫无头绪,根本没想到是矩阵快速幂,其实看见k那么大,就应该想到用快速幂什 ...

  4. AC日记——导弹拦截 洛谷 P1020 (dp+模拟)

    题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...

  5. js知识体系的梳理一

    今天简单的总结了js的一些东西,梳理下整个体系,每一次的总结都会有不同的收获:js总结一一.[获取元素]: 1.通过ID: var oBtn=document.getElementById('btn1 ...

  6. cotangent Laplacian

    几何网格处理经常用到 cotangent laplacian矩阵.前几天把这个功能整合到我的Maya 转 Matlab插件了. 这里发一个利用cotangent laplacian计算特征向量并显示的 ...

  7. 第一章 初识MVC4

    1.MVC模式 Mvc将应用程序分离为三个部分: Model:是一组类,用来描述被处理的数据,同时也定义这些数据如何被变更和操作的业务规则.与数据访问层非常类似. View:是一种动态生成HTML的模 ...

  8. Eclipse调试按钮消失问题

    Window-->Reset Perspective 把Eclipse重置一下,然后 点击红色框圈的向下的箭头,在弹出的菜单里边,点击 show debug toolbar 这个菜单项目,然后奇 ...

  9. usb驱动开发5之总线设备与接口

    Linux设备模型中的总线落实在USB子系统里就是usb_bus_type,它在usb_init的函数bus_register(&usb_bus_type)里注册.usb_bus_type定义 ...

  10. 【Asp.Net】document.getElementById 的属性介绍

    document.getElementById("id").style.xxx可以设置指定ID的控件的属性值. 主要支持以下一些属性设置: 盒子标签和属性对照 CSS语法(不区分大 ...