原题
题目大意
给定一棵有根树,开始时所有点都没有水,有三种操作,一种是清空某个结点和它所有祖先的水,一种是向某个结点和它所有的后代注水,一种是询问某个结点有没有水。
分析
注意到一个结论如果有个点没有水,那么它的祖先也一定没有水。那么清空操作只要在结点处标记一下清空即可,查询时,查找结点极其后代中是否有标记,就能知道结点是否有水了。采用dfs序+线段树,每个结点都存储该区间是否都水。注水就区间修改,清空就只将该结点处改为0。
参考代码
|
|
吾生也有涯,而知也无涯
给定一棵有根树,开始时所有点都没有水,有三种操作,一种是清空某个结点和它所有祖先的水,一种是向某个结点和它所有的后代注水,一种是询问某个结点有没有水。
注意到一个结论如果有个点没有水,那么它的祖先也一定没有水。那么清空操作只要在结点处标记一下清空即可,查询时,查找结点极其后代中是否有标记,就能知道结点是否有水了。采用dfs序+线段树,每个结点都存储该区间是否都水。注水就区间修改,清空就只将该结点处改为0。
|
|