Descriptions
给出一棵树,每条边上有边权。
定义函数T(S)如下,其中S是一个01串,S串包含了m“块“1。
T(S)=∑mi=1fxi
其中f是一个给出的序列,
要求回答Q个形如“x y l“的询问。
对于每个询问,考虑u到v路径上的所有边的长度e1e2...ek
根据e序列构造s序列:Si=1当且仅当ei≤l
要求回答T(S)的值。
Analysis
先考虑一条链上怎么做。
离线处理。
考虑用线段树来维护这条链上的信息。
对于一段,我们需要知道这一段左端1的个数,右端1的个数,以及中间的贡献值。
然后合并两段的方式就很显然了。
最后再套上树链剖分就可以通过了。
Debug logs
1st submission : 11186274 2015-05-21 11:31:03 YvesCjl 536E - Tavas on the Path GNU C++ Wrong answer on test 3 779 ms 17600 KB
debug : “grphd” 数组没有被赋值
2nd submission : 11186381 2015-05-21 11:43:28 YvesCjl E - Tavas on the Path GNU C++ Wrong answer on test 3 1154 ms 17600 KB
debug : 在链剖上跳过程中,应该跳两者组头较深者而不是跳两者较深者。
3rd submission : 11186688 2015-05-21 12:13:18 YvesCjl 536E - Tavas on the Path GNU C++ Accepted 1216 ms 18300 KB
本文介绍了一种利用树链剖分与线段树解决特定路径查询问题的方法。通过对链上信息进行离线处理,使用线段树维护链上的信息,包括区间的左端1数量、右端1数量及中间贡献值,并通过合并实现路径查询。
12万+

被折叠的 条评论
为什么被折叠?



