1.题目描述:点击打开链接
2.解题思路:本题利用Treap树实现的名次树来完成这三种操作。由于操作比较复杂,因此我们利用离线算法来解决。可以实现把所有的D操作执行完,得到剩下的图,接着按照逆序逐步插入边,并在恰当的时机执行Q操作和C操作。用一棵名次树维护一个连通分量的点权,则C操作对应于名次树的一次修改操作(可以用一次删除和一次插入来实现),Q操作对应Kth操作,而执行D操作时,如果两个端点已...
分类:
其他好文 时间:
2015-08-31 01:09:05
阅读次数:
135
#1069 : 最近公共祖先·三
时间限制:10000ms
单点时限:1000ms
内存限制:256MB
描述
上上回说到,小Hi和小Ho使用了Tarjan算法来优化了他们的“最近公共祖先”网站,但是很快这样一个离线算法就出现了问题:如果只有一个人提出了询问,那么小Hi和小Ho很难决定到底是针对这个询问就直接进行计算还是等待一定数量的询问一起计算。毕竟无论是一...
分类:
其他好文 时间:
2015-08-07 19:59:59
阅读次数:
342
??
题意:一个森林,询问两个节点距离,若无法到达,输出Not connected。
思路:还是求LCA的思想,只需再对每个询问的两个节点判断是否在一棵树内即可。
有一个问题是这道题的query很大,达到了1000000,所以离线算法空间上比较虚,
然而只会离线的.....于是把int改成short int险过....
#include
#include
#include ...
分类:
其他好文 时间:
2015-08-03 19:21:18
阅读次数:
163
题意:给定一棵树n个节点m个询问,每次询问两个节点之间的距离。
思路:Tarjan离线算法求lca。
这题一开始交了n发一直爆栈.......百度了一下大概说的是这样hdu用的是windows服务器所以栈大小极其坑爹,稍微深一点的递归就会爆栈(正式比赛一般不会爆)
解决方法就是加一句#pragma comment(linker, "/STACK:1024000000,1024000000")...
分类:
编程语言 时间:
2015-08-03 17:03:23
阅读次数:
155
PS:介绍:http://blog.csdn.net/liang5630/article/details/7917702RMQ算法。是一个高速求区间最值的离线算法,预处理时间复杂度O(n*log(n))。查询O(1)。所以是一个非常高速的算法,当然这个问题用线段树相同可以解决。1、求区间的最大值和最...
分类:
其他好文 时间:
2015-07-27 14:46:43
阅读次数:
126
给出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];...
分类:
编程语言 时间:
2015-07-20 16:35:14
阅读次数:
106
LCA tarjan算法模板题
题意:给一个无根树,有q个询问,每个询问两个点,问两点的距离。
用tarjan离线算法算出每个询问的两点的最近公共祖先
ans[i]=dis[x[i]]+dis[y[i]]-2*dis[z[i]]; // x[i],y[i]分别存储每次询问的两点,z[i]存储这两点的最近公共祖先
#include "stdio.h"
#include "stri...
分类:
编程语言 时间:
2015-07-20 11:05:05
阅读次数:
182
有一个普通二叉树,AB分别为两个子节点,求AB最近(深度最浅)的公共父节点。
此题仍然是一个老题,有着多种解决方法,本文针对其中三种方法来进行分析总结。
这三种方法分别是:递归法,tarjan离线算法,RMQ在线算法。
递归法
递归法比较直观简单,思路如下:
首先判定当前节点root是否是A节点或者B节点,若是的话直接返回该节点
若不是,分别对root节点的左右子树进行递归查找最小公共...
分类:
其他好文 时间:
2015-07-19 13:36:58
阅读次数:
1468
/*莫队算法是离线算法,用来解决已知l,r问你l,r里面值的问题对块进行排序,后面的块通过前面的块左移右移得到,所以可能有的情况能得到O(1)或者较低的复杂度排序的时候除以跟好n(?)本题题意:从l到r区间内问有多少个不同的数,询问很多*/#include#include#include#inclu...
分类:
编程语言 时间:
2015-07-16 21:58:16
阅读次数:
209
题意:一个村子有n个房子,他们用n-1条路连接起来,每两个房子之间的距离为w,有m次询问,每次询问房子a,b之间的距离是多少。
分析:最近公共祖先问题,建一棵树,求出每一点i到树根的距离d[i],每次询问a,b之间的距离=d[a]+d[b]-2*d[LCA(a,b)];LCA(a,b)是a,b的最近公共祖先。
#pragma comment(linker, "/STACK:1024000000...
分类:
编程语言 时间:
2015-06-29 14:52:31
阅读次数:
164