树上倍增
WerKeyTom_FTD
我是一只来自中山纪念中学高三的oier,请多多指教
展开
-
贸易
题目大意一共有m个结点,每个结点有一个权值a[i]。初始n个结点练成一颗树,有若干操作每次操作要么把一个结点加入树中要么询问u到v的路径上,a[x]-a[y]的最大值(u到v存在方向,先经过y再经过x)。 m<=10^5倍增倍增维护最小值、最大值、正着走的答案和反着走的答案,为了实现方便可以定义个类型存储然后打一个merge函数。merge中通过两条路径的信息得到合并后路径的信息,最小值和最大值容原创 2016-02-16 20:37:12 · 545 阅读 · 0 评论 -
[美团 CodeM 复赛]城市网络
题目描述有一个树状的城市网络(即 nnn 个城市由 n−1n-1n−1 条道路连接的连通图),首都为 111 号城市,每个城市售卖价值为 aia_iai 的珠宝。你是一个珠宝商,现在安排有 qqq 次行程,每次行程为从 uuu 号城市前往 vvv 号城市(走最短路径),保证 vvv 在 uuu 前往首都的最短路径上。在每次行程开始时,你手上有价值为 ccc 的珠宝(每次行程可能不同),并且每经原创 2017-07-10 11:02:07 · 815 阅读 · 0 评论 -
[bzoj十连测第五场 B]可持久化字符串
题目大意一个S的循环节T表示为可以找到一个正整数k使得S是TkT^k的前缀。 一次操作会在字符串尾部添加一个字符,并且你需要在每次操作后输出最小循环节长度。 要求可持久化与在线。只跳log步我们知道结论,答案就是i-f[i]。 如何可持久化KMP? 我们考虑一种做法让一次更新MP只需要跳KMP步。 具体的,如果目前在j,我们看f[j]+1是否与i匹配。 如果匹配,那么f[i]=f[j]+原创 2016-07-14 09:50:59 · 1151 阅读 · 0 评论 -
[51nod1743]雪之国度
题目大意对于一个无向图,边有边权。对于每组询问u、v,如果可以找到两条从u到v不相交的路径,输出路径上边权最大值的最小值。维护边双我们考虑到,如果按照边权从小到大加边,第一次使得u和v处在同一个边双联通分量时我就求得了答案。 考虑一个很强的方法,用LCT或启发式合并维护森林,动态维护双连通分量。 因为不可能去持久化+二分求询问,我们可以再思考,每次将两个边双合并意味着一次集合合并,我们建一个新点原创 2016-11-16 20:40:59 · 738 阅读 · 0 评论 -
[51nod1709]复杂度分析
题目描述给出一棵n个点的树(以1号点为根),定义dep[i]为点i到根路径上点的个数。众所周知,树上最近公共祖先问题可以用倍增算法解决。现在我们需要算出这个算法精确的复杂度。我们定义计算点i和点j最近公共组先的精确复杂度为bit[dep[i]-dep[lca(i,j)]]+bitdep[j]-dep[lca(i,j)]。为了计算平均所需的复杂度为多少,请你帮忙计算任意两点计算最近公共组先所需复杂度的原创 2016-10-29 18:40:53 · 658 阅读 · 0 评论 -
排队
题目描述做法我们先处理出fix表示在全空情况下不断进人,i这个房间被第几个人最终停留。 用一个堆保留空房间当前fix的最小值,每次进一个人就是选择堆中最小值的房间。 拿走人的话观察一下就是从这个房间往上有人房间的数量-1,这个可以倍增来求,因为这个房间到根路径上有人和没人一定是分离开的。 分析一下势能这样做是n log n的。#include<cstdio>#include<algorith原创 2016-10-06 07:46:37 · 436 阅读 · 0 评论 -
富爷说是一颗树
题目描述富爷说来一棵树,于是大头栽了一棵树。树大了,有n个点和n - 1条边,任意两个点都是联通的,点的标号为1 - n。爱树的大头和富爷在树上安居乐业,但大头住在u,而富爷住在v,他们都很不高兴,因为u到v有且只有一条简单路径。 当然了,树王富爷找到了解决办法,他打算带着大头再给树建一条边(保证不是自环),而且他们会在n * (n - 1) / 2的方案中随机选择一种。 但,要让富爷和大头开心原创 2016-09-21 22:44:22 · 489 阅读 · 0 评论 -
Map
题目大意对于一副图,若干询问每次询问加入一条边后原图增加多少安全点对,安全点对定义为两个点之间存在两条不经过相同边的路径。裸题缩点后,每个连通分量点权为包含点数量。 若加入边为(j,k),j在点x内,k在点y内。答案为x到y树路径上点权和平方减点权平方和,倍增维护一下。#include<cstdio>#include<algorithm>#include<cmath>#define fo(i原创 2016-09-18 17:32:21 · 397 阅读 · 0 评论 -
[UER #1C]Dzy Loves Graph
题目大意有n个结点,初始没有边。m个操作,操作类型有三: 1、a与b之间连一条长度为i的边(i为操作编号) 2、删除比边权最大的k条边。 3、撤销刚刚执行的操作,保证撤销的不是撤销操作。 每次操作后输出最小生成树所有边权和。可持久化并查集有许多版本,于是我们发现版本之间形成树的结构,为什么? 加入的边越来越大,因此删除操作相当于跳到k级祖先,每次添加操作就在下面加一个儿子,所以是树的结构。原创 2016-07-03 08:26:27 · 699 阅读 · 0 评论 -
[bzoj十连测第三场 B]线段树
题目大意有一个长度为n的序列与m个修改操作,每个修改操作是将序列[l,r]的元素都修改为这个区间的最大值。 现有q个操作,要么是修改序列的一个元素,要么是询问执行[l,r]的修改操作后,第k个元素是多少。询问之间独立,而修改会造成影响。搞一搞我们容易发现,每一个位置都可以被表示成一段区间的最大值。 我们枚举右端点r来离线做,把所有询问操作挂在其对应右端点上。 例如位置k,找到当前操作前最后一个原创 2016-07-11 20:45:57 · 687 阅读 · 0 评论 -
[agc006c]Rabbit Exercise
前言一开始看成随机跳一个兔子让我感觉不可思议,于是很难。 如果理解对题意,相信这题不难做。题意n只兔子在数轴上。 有m种操作,每种操作找到一个编号的兔子,再随机选择一个编号和其相邻的兔子,然后让该兔子的位置改为与这只相邻编号兔子的对称位置。 问最后每个编号兔子位置的期望值。做法很容易发现可以用每次操作兔子的期望位置直接代替原位置,因此每次相当于xi=xi+1+xi−1−xix_i=x_{i+1原创 2017-09-25 22:08:22 · 637 阅读 · 0 评论