题目链接
题目描述
wyf非常喜欢树。一棵有根数树上有N个节点,1号点是他的根,每条边都有一个距离,而wyf是个爱问奇怪问题的熊孩子,他想知道对于某个点x,以x为根的子树上,所有与x距离大于等于k的点与x的距离之和。
输入描述:
第一行一个正整数N
接下来N-1描述这棵树,每行两个数第i行两个数p和D表示树上有一条p到i+1长度为D的边。(p<=i)
下面一行一个正整数Q表示wyf的询问次数。
接下来Q行每行两个正整数x和k。 (1<=N,Q<=2x105,1<=D,K<=106)
输出描述:
对于每次询问x,k输出以x为根的子树上,所有与x距离大于等于k的点与x的距离之和。(若不存在这样的点,则输出应为0)
对于这样的一颗树,我们查询的是以x为根的子树的所有距离"≥K"的子节点的值的权值的和。
思路:对于这样的点,我们从根节点1开始向下跑,建立时间戳来更新所有的节点,时间戳表明的是对应查到的节点的对应的时间上的节点的可持久化线段树的状态。然后,千万不要忘记使用long long,WA到自闭……
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include