hdu4547 lca tarjan
比较直接。
#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的更多相关文章
- HDU 2874 Connections between cities(LCA Tarjan)
Connections between cities [题目链接]Connections between cities [题目类型]LCA Tarjan &题意: 输入一个森林,总节点不超过N ...
- POJ 1986 Distance Queries(LCA Tarjan法)
Distance Queries [题目链接]Distance Queries [题目类型]LCA Tarjan法 &题意: 输入n和m,表示n个点m条边,下面m行是边的信息,两端点和权,后面 ...
- LCA Tarjan方法
LCA Tarjan方法 不得不说,高中生好厉害,OI大佬,感觉上个大学好憋屈啊! 说多了都是眼泪 链接拿去:http://www.cnblogs.com/JVxie/p/4854719.html
- LCA tarjan+并查集POJ1470
LCA tarjan+并查集POJ1470 https://www.cnblogs.com/JVxie/p/4854719.html 不错的一篇博客啊,让我觉得LCA这么高大上的算法不是很难啊,嘻嘻嘻 ...
- hihoCoder #1067 : 最近公共祖先·二 [ 离线LCA tarjan ]
传送门: #1067 : 最近公共祖先·二 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 上上回说到,小Hi和小Ho用非常拙劣——或者说粗糙的手段山寨出了一个神奇的网站 ...
- LA 5061 LCA tarjan 算法
题目大意: 给定所有点的权值都为0,给定一棵树以后,每次询问都要求给定两点 x , y 和一个权值w,要求x,y路径上所有点权值加上w,最后求出每一个节点的值 这里因为查询和点都特别多,所以希望能最后 ...
- [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 ...
- 最近公共祖先LCA(Tarjan算法)的思考和算法实现
LCA 最近公共祖先 Tarjan(离线)算法的基本思路及其算法实现 小广告:METO CODE 安溪一中信息学在线评测系统(OJ) //由于这是第一篇博客..有点瑕疵...比如我把false写成了f ...
- POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
题目链接:http://poj.org/problem?id=1330 题意:给定一个n个节点的有根树,以及树中的两个节点u,v,求u,v的最近公共祖先. 数据范围:n [2, 10000] 思路:从 ...
随机推荐
- HTML设置超链接字体颜色和点击后的字体颜色
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Spring 4.1+ 的 JSONP使用
如今的巨石应用已经越来越不行了,很多互联网在后期都会在用分布式的架构 那么在页面上不同的服务调用不同域名下的json是有问题的 (跨域:不同域名,相同域名但是不同端口) JavaScript规范中提到 ...
- Unity开发 资源准备
开发环境准备 插件资源 当有喜欢的资源,选择去泽国社区和纳金网下载,仅用于学习目的. Fbx查看器 下载版本对应的FBX插件 比如:fbx20133_quicktime_win.exe 对应Quick ...
- linux下查找某个目录下包含某个字符串的文件
有时候要找一些字符串,但是又不知道在哪个文件,只记得一些字符串 那么如何在linux下寻找包含某段文字的文件呢? 强大的find命令可以帮你完成不可能的任务. 比如我只记得我的程序里包含唯一的字符串“ ...
- UltraISO制作U盘启动盘安装Win7/10系统攻略
UltraISO制作U盘启动盘安装Win7/9/10系统攻略 U盘安装好处就是不用使用笨拙的光盘,光盘还容易出现问题,无法读取的问题.U盘体积小,携带方便,随时都可以制作系统启动盘. U盘建议选择8G ...
- SqlMapConfig.xml中的setting属性设置
<settings cacheModelsEnabled="true" lazyLoadingEnabled="false" en ...
- Unity小知识
这些是我在开发时遇到的一些问题: 2D的碰撞器和3D的碰撞器是没有任何物理反应的,必须是2D对2D,3D对3D 碰撞器Collision包含触发物体的速度等信息,触发器没有
- qrcodeJS生成二维码
后续抽时间自己来整理笔记 http://code.ciaoca.com/javascript/qrcode/
- 实验5 简单嵌入式WEB服务器实验 实验报告 20135303 20135326
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级: 1353 姓名:20135303 魏昊卿 学号:2013532 ...
- 20135306黄韧 附录A及第十章学习总结
附录A 错误处理 A.1 Unix系统中的错误处理 1.Unix风格的错误处理 if ((pid = wait(NULL)) < 0) { fprintf(stderr,”wait error ...