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] 思路:从 ...
随机推荐
- java获取Json和http状态码
最近再做接口自动化测试,其中有几个方法比较重要 1.获取http状态码 /* * 返回接口状态码 * */ public static String getHttpCode(String url) { ...
- 边工作边刷题:70天一遍leetcode: day 85-2
Paint Fence 要点: 这题是求number of ways,如果是相邻不相同颜色,那么就trivial了:k*(k-1)^(n-1).所以这里no more than two adjacen ...
- 2014 UESTC 暑前集训队内赛(3) 部分解题报告
B.Battle for Silver 定理:完全图Kn是平面图当且仅当顶点数n<=4. 枚举所有完全图K1,K2,K3,K4,找出最大总权重. 代码: #include <iostrea ...
- JavaWeb学习之Servlet(四)----ServletConfig获取配置信息、ServletContext的应用
[声明] 欢迎转载,但请保留文章原始出处→_→ 文章来源:http://www.cnblogs.com/smyhvae/p/4140877.html [正文] 一.ServletConfig:代表当前 ...
- Java的IO操作---File类
目标 1)掌握File类作用 2)可以使用file类中方法对文件进行读写操作. File类 唯一与文件有关的类.使用file类可进行创建或删除操作,要想使用File类,首先观察File类的构造方法. ...
- win7系统电脑连接小米蓝牙音箱
一.买好蓝牙适配器,插到电脑上. 二.右下角工具栏找到蓝牙图标 三.右键这个图标,选择'显示Bluetooth设备' 四.找到小米蓝牙音箱 'NDZ-030-AA' 五.双击打开它,然后选择'服务'选 ...
- 30Springd的包扫描——<context:component-scan base-package=” ”/>
在context中配置 如:在base-package指明一个包: <context:component-scan base-package="cn.edu.dao"/> ...
- php基础03:数据类型
<?php // day01:数据类型 //01.字符串 $x = "hello world"; echo $x; echo "<br>"; ...
- android json解析及简单例子
JSON的定义: 一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据 ...
- SpringMvc学习心得(五)控制器产生与构建
SpringMvc学习心得(五)控制器产生与构建 标签: springspring mvc框架 2016-03-22 15:29 140人阅读 评论(0) 收藏 举报 分类: Spring(4) ...