HDU 2874 LCA离线算法 tarjan算法
给出N个点,M条边。Q次询问
Q次询问每两点之间的最短距离
典型LCA 问题 Marjan算法解
#include "stdio.h"
#include "string.h" struct Edge
{
int to,next,len;
}edge[20010]; struct Ques
{
int to,next,index;
}ques[2000010];
int head[10010],q_head[10010],f[10010],dis[10010]; int vis[10010],ans[1000010];
// vis记录结点是否被遍历过,而且存储结点所在的树是哪颗
// ans记录每一个询问的答案
int n,m,q,tot,q_tot; void add_edge(int a,int b,int c)
{
edge[tot].to=b;
edge[tot].next=head[a];
edge[tot].len=c;
head[a]=tot++; edge[tot].to=a;
edge[tot].next=head[b];
edge[tot].len=c;
head[b]=tot++;
} void add_ques(int a,int b,int index)
{
ques[q_tot].to=b;
ques[q_tot].next=q_head[a];
ques[q_tot].index=index;
q_head[a]=q_tot++; ques[q_tot].to=a;
ques[q_tot].next=q_head[b];
ques[q_tot].index=index;
q_head[b]=q_tot++;
} int find(int w)
{
if (f[w]==w) return w;
return f[w]=find(f[w]);
} void Tarjan(int w,int deep,int root) // w:当前点,deep:当前深度,root:根节点
{
int i,v;
f[w]=w;
vis[w]=root;
dis[w]=deep; for (i=q_head[w];i!=-1;i=ques[i].next)
{
v=ques[i].to;
if (vis[v]==root)
ans[ques[i].index]=dis[v]+dis[w]-2*dis[find(v)];
} for (i=head[w];i!=-1;i=edge[i].next)
{
v=edge[i].to;
if (vis[v]==-1)
{
Tarjan(v,deep+edge[i].len,root);
f[v]=w;
}
}
}
void init()
{
int i,a,b,c;
memset(head,-1,sizeof(head));
memset(q_head,-1,sizeof(q_head));
tot=q_tot=0; while (m--)
{
scanf("%d%d%d",&a,&b,&c);
add_edge(a,b,c);
} for (i=1;i<=q;i++)
{
scanf("%d%d",&a,&b);
add_ques(a,b,i);
}
memset(vis,-1,sizeof(vis));
memset(ans,-1,sizeof(ans));
}
int main()
{
int i;
while (scanf("%d%d%d",&n,&m,&q)!=EOF)
{
init();
for (i=1;i<=n;i++)
if (vis[i]==-1)
Tarjan(i,0,i); for (i=1;i<=q;i++)
if (ans[i]==-1)
printf("Not connected\n");
else
printf("%d\n",ans[i]);
}
return 0;
}
HDU 2874 LCA离线算法 tarjan算法的更多相关文章
- LCA 离线的Tarjan算法 poj1330 hdu2586
LCA问题有好几种做法,用到(tarjan)图拉算法的就有3种.具体可以看邝斌的博客.http://www.cnblogs.com/kuangbin/category/415390.html 几天的学 ...
- (转载)LCA问题的Tarjan算法
转载自:Click Here LCA问题(Lowest Common Ancestors,最近公共祖先问题),是指给定一棵有根树T,给出若干个查询LCA(u, v)(通常查询数量较大),每次求树T中两 ...
- 有向图的强连通算法 -- tarjan算法
(绘图什么真辛苦) 强连通分量: 在有向图 G 中.若两个顶点相互可达,则称两个顶点强连通(strongly connected). 假设有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有 ...
- hdu 2874(LCA)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874 思路:近乎纯裸的LCA,只是题目给出的是森林,就要判断是否都在同一颗树上,这里我们只需判断两个子 ...
- LCA 离线做法tarjan
tarjan(int u) { int v; for(int i=h[u];i;i=nex[i])//搜索边的 { v=to[i]; tarjan(v); marge(u,v); vis[v]=; } ...
- LCA离线算法Tarjan的模板
hdu 2586:题意:输入n个点的n-1条边的树,m组询问任意点 a b之间的最短距离 思路:LCA中的Tarjan算法,RMQ还不会.. #include <stdio.h> #inc ...
- Tarjan算法离线 求 LCA(最近公共祖先)
本文是网络资料整理或部分转载或部分原创,参考文章如下: https://www.cnblogs.com/JVxie/p/4854719.html http://blog.csdn.net/ywcpig ...
- 【POJ 1330 Nearest Common Ancestors】LCA问题 Tarjan算法
题目链接:http://poj.org/problem?id=1330 题意:给定一个n个节点的有根树,以及树中的两个节点u,v,求u,v的最近公共祖先. 数据范围:n [2, 10000] 思路:从 ...
- POJ 1330 Nearest Common Ancestors(LCA Tarjan算法)
题目链接:http://poj.org/problem?id=1330 题意:给定一个n个节点的有根树,以及树中的两个节点u,v,求u,v的最近公共祖先. 数据范围:n [2, 10000] 思路:从 ...
随机推荐
- 第6章 Spring MVC的数据转换、格式化和数据校验
使用ConversionService转换数据 <%@ page language="java" contentType="text/html; charset=U ...
- Redis Sentinel哨兵配置
概述 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案,当用Redis做Master-slave的高可用方案时,假如master宕机了,Redis本身(包括它的很多客户端)都 ...
- js中的面向对象(一)封装
1.简单的封装(定义) var cat1 = {}; cat1.name = '阿黄'; cat1.sex = '男'; cat1.age = 11; //cat2也同样具有三个属性 var cat2 ...
- A - Presents
Problem description Little Petya very much likes gifts. Recently he has received a new laptop as a N ...
- ADO.NET增删改
static void Main1(string[] args) {添加造连接字符串string connstring = "server=.;database=mydb;user=sa;p ...
- 图片文字滚动插件jQuery Scrollbox
图片文字滚动插件jQuery Scrollbox附件中提供了五种图片.文字滚动样式,只需调用jquery库和jQuery Scrollbox插件,然后再加一段简单的jquery代码即可使用,兼容性良好 ...
- 使用eclipse,对spring boot 进行springloader或者devtool热部署失败处理方法
确定配置进行依赖和配置没有错误后. 调整spring boot 的版本,因为新版本对老版本的spring boot 不能使用. 改为: <groupId>org.springframewo ...
- C++中内存分配、函数调用和返回值问题
转载博客:http://blog.csdn.net/q_l_s/article/details/52176159(源地址找不到,就贴了这位大神的博客地址,他也是转载的,不过要是学习的话,他的博客很不错 ...
- Windows Phone 编程: 摇一摇 效果
Step 1: 下载摇晃手势开发库 http://create.msdn.com/en-us/edu ... ake_Gesture_LibraryStep 2: 解压后进入 ShakeGesture ...
- [SCOI2010] 股票交易 (单调队列优化dp)
题目描述 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未来T天内某只股票的走势,第i天的股票买入价为每股APi, ...