题解:
对于每个树上节点存一个版本的可持久化线段树,为它到根节点上所有权值的权值线段树(需要离散化)。
然后对于每次询问,这条链(a,b)的线段树就是:线段树a+线段树b?线段树lca?线段树falca线段树_a + 线段树_b - 线段树_{lca} - 线段树_{fa_{lca}}
然后线段树上求第k小啦。
代码:
#include
#include
#include...
分类:
其他好文 时间:
2015-04-15 09:44:07
阅读次数:
176
每个点的主席树的root是从其父转移来的。询问的时候用U+V-LCA-FA(LCA)即可。#include#includeusing namespace std;#define N 100001int v[N>1); T[cur].lc=++e; BuildTree(T[cur].lc,l,m); ...
分类:
其他好文 时间:
2015-04-13 20:40:23
阅读次数:
139
题目大意:给定一棵树,每个节点有权值,询问两个节点路径上的权值第k小
这题很卡时间。。。
树链剖分+二分+树套树的O(nlog^4n)做法可以去死了
没有修改操作,树链剖分+二分+划分树O(nlog^3n),还是死了
我怒了,裸学了一发可持久化线段树(不看任何代码OTZ,我是怎么做到的0.0),二分+主席树,O(nlog^2n),居然还是死了!
最后发现我SB了,完全没有必要二分,直...
分类:
其他好文 时间:
2014-10-13 20:02:37
阅读次数:
373
2588: Spoj 10628. Count on a treeTime Limit:12 SecMemory Limit:128 MBSubmit:1795Solved:371[Submit][Status]Description给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k)...
分类:
其他好文 时间:
2014-10-04 21:24:17
阅读次数:
274
首先,这是一道坑题,我拍了几百组数据都是对的,交上去就WA,原因下面会讲。。。一开始我觉得要链剖,后来ZYH说。。。只要dfs序就可以解题。然后,解法嘛。。。就是每个点到根的链都建成一棵线段树,然后发现会MLE,于是就可持久化了所有线段树。在查询的时候呢,先找出两个点a, b的LCA,不妨叫c,然后...
分类:
其他好文 时间:
2014-10-04 17:38:16
阅读次数:
178