比较直接。

#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. 微博API使用

    新浪微博的API开放平台: http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI IOS和Android都有SDK可以下载,ios的地址: https:// ...

  2. 查询OOP课程

    --检测有没有名称为MySchool的数据库 use master if exists (select * from sysdatabases where name='myschool') begin ...

  3. Docker云Paas平台部署:Docker+Mesos+Marathon

    针对“互联网+”时代的业务增长.变化速度及大规模计算的需求,廉价的.高可扩展的分布式x86集群已成为标准解决方案,如Google已经在几千万台服务器上部署分布式系统.Docker及其相关技术的出现和发 ...

  4. php 上传大文件主要涉及配置upload_max_filesize和post_max_size两个选项

    php 上传大文件主要涉及配置 upload_max_filesize 和post_max_size两个选项   今天在做上传的时候出现一个非常怪的问题,有时候表单提交可以获取到值,有时候就获取不到了 ...

  5. no.4 抽奖测试

    #-*-coding=gbk-*- import sys import random a=[] try: for x in range(1,20+1,1): #打印20人数编号 a.append(x) ...

  6. Android Touch事件传递机制解析 (推荐)

    最近新闻列表里的下拉 down up  move 等等让我十分头疼 ,无意间看到了一篇非常不错的帖子,转载如下: 开篇语:最近程序在做一个小效果,要用到touch,结果整得云里面雾里的,干脆就好好把a ...

  7. iOS 定位精度

    时间 2015-03-19 18:30:59  图灵社区  由于iOS不能直接控制到GPS,一般来说我们都会使用CLLocationManager来获取地理位置信息,我们会使用 manager.des ...

  8. Matlab的title如何实现换行显示?

    怎么才能在'B Range'前面开始换行呢? title(['abc','L Range:',num2str(a),'(nm)','~~',num2str(b),'(cm)','B Range:',n ...

  9. Windows下虚拟机安装Mac OS X ----- VM12安装Mac OS X 10.11

    Windows下虚拟机安装Mac OS X -– VM12安装Mac OS X 10.11 随着Iphone在国内大行其道,越来越多的开发者涌入iOS开发大军 中,但都苦于没有苹果机,本文即将介绍WI ...

  10. 5.HBase In Action 第一章-HBase简介(1.1.3 HBase的兴起)

    Pretend that you're working on an open source project for searching the web by crawling websites and ...