比较直接。

#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. [转]Composer 中国镜像

    用法: 有两种方式启用本镜像服务: 将以下配置信息添加到 Composer 的配置文件 config.json 中(系统全局配置).见“例1” 将以下配置信息添加到你的项目的 composer.jso ...

  2. HDU 3584 Cube --三维树状数组

    题意:给一个三维数组n*n*n,初始都为0,每次有两个操作: 1. 翻转(x1,y1,z1) -> (x2,y2,z2) 0. 查询A[x][y][z] (A为该数组) 解法:树状数组维护操作次 ...

  3. Android中Intent传递对象的两种方法(Serializable,Parcelable)

    今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putP ...

  4. mysql客户端授权后连接失败问题

    在本地(192.168.1.152)部署好mysql环境,授权远程客户机192.168.1.%连接本机的mysql,在iptables防火墙也已开通3306端口.如下:mysql> select ...

  5. 理解SQL Server中的权限体系(上)----主体

    原文:http://www.cnblogs.com/CareySon/archive/2012/04/10/mssql-security-principal.html 简介 权限两个字,一个权力,一个 ...

  6. Sublime Text 3 文本编辑器

    1.安装下载 下载地址:http://www.cr173.com/soft/121149.html http://www.xiazaiba.com/html/24343.html 官网 http:// ...

  7. SOS.dll (SOS Debugging Extension)

    SOS.dll (SOS Debugging Extension) lays threads associated with a live thread. The -special option di ...

  8. unity触发器和碰撞器

    Unity中检测碰撞的方法有两种,一种是触发器一种是碰撞器,现在我来解释一下两种的区别. 触发器:有三种方法,分别是OnTriggerEnter,OnTriggerStay,OnTriggerExit ...

  9. php基础10:字符串中插入变量

    <?php //插入字符串 //1.双引号可以解析字符串中的变量:但是前后不能跟中文符号 $username = "gaoxiong"; echo "my name ...

  10. nginx安装pcre

    一.有的服务器上没有安装pcre那么安装nginx的时候会报错 所以在安装之前我们可以: yum install pcre-devel 如果很不巧,服务器也没有配yum,也不能连互联网.那么我们只能自 ...