题意:给出一颗树,有两种操作:
1. mark u 标记结点u
2.query u 询问离u最近的且被标记的祖先结点是哪个
让你输出所有询问的和。
显然一个暴力的做法是每次都直接修改,然后查询的话就一个一个地向祖先查询,直到一个被标记过的点.
让我们来优化一下这个暴力.
类似于一个题https://www.luogu.com.cn/problem/P1653
考虑反着搞,如果一个点的最早被标记时间比当前时间大或者根本没有被标记,那么这个点以后都不会用到了,可以被路径压缩掉.
#include
#include
#include
#include
#include
#include
#include
当然,这仍然是个暴力(虽然在Aizu上面过了),比如树退化成一条链且每一次都查询叶子节点而不修改,就可以被卡到n方.
这里有一篇线段树维护的,大家可以看一下.
https://www.cnblogs.com/zeroxf/p/6749091.html