抓fafa的qzh
题号:NC15505
时间限制:C/C++/Rust/Pascal 8秒,其他语言16秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

冬天又过去了,春天又来了,Alice和Bob又开始玩游戏了(雾

    

Alice和Bob开始玩一个小游戏,但他们觉得并不好玩,于是把这个游戏给了最可爱的fafa和最坏坏的qzh,fafa和qzh觉得很有趣,就玩了起来

这是在一棵树上的游戏,树的形态将会给出,所有树的边长度都为1

最可爱的fafa拥有一种高端的技巧,可以将自己化身为多个可爱度不同的fafa,每次轮到fafa行动时,fafa都会在点u到点v路径上所有的点都放一只可爱度为w的fafa,每个点可以同时存在多个fafa

最坏坏的qzh不喜欢可爱的生物,于是他要去抓可爱度l到可爱度r的fafa。起初qzh站在点p上,他想要知道他离所有可爱度为l到r的fafa的距离和到底是多少来决定他要不要离开他的笔记本

注意:因为fafa本体非常强大,所以坏坏的qzh并不能真的去抓fafa,也就是说,树上的fafa会不断增多,但坏坏的qzh只能看着这棵树越来越可爱,以及想(y)象(y)着去抓可爱的fafa

坏坏的qzh觉得很不开心,而且他的笔记本和脑子跑的都很慢,并不能解决这个问题,所以他把这个问题交给了你,你需要回答他每次询问的距离和是多少


输入描述:

第一行输入两个数n,m,分别表示数的点数和询问的次数
第2行到第n行共计n-1行每行输入两个数a,b,表示点a和点b之间有一条边(数据保证是一棵树)
接下来m行,每行第一个数为1或者2,表示两种操作
1:读入u,v,w,表示在点u到点v的路径上都放一只可爱度为w的fafa
2:读入l,r,p,表示一只站在点p上的qzh想知道他距离所有可爱度为l到r之间([l,r])的距离和是多少

输出描述:

输出若干行,每行包括一个整数,对于每个操作2需要输出,但操作1不需要
示例1

输入

复制
10 20
6 7
1 2
5 4
1 3
10 8
7 9
1 8
1 4
2 6
1 5 1 27280262
1 2 4 27245688
2 27234840 27290934 6
1 10 6 27227228
2 27313334 27321446 3
1 9 10 27258713
1 3 4 27249714
2 27270810 27309316 1
1 9 2 27254034
2 27292791 27302394 10
1 7 5 27319311
1 5 6 27301947
1 10 1 27318014
2 27247634 27320484 9
1 10 5 27299018
2 27240281 27286743 8
2 27296751 27319246 4
2 27309633 27314750 9
2 27257490 27301409 6
2 27235007 27294034 2

输出

复制
15
0
3
0
112
46
20
0
38
32

备注:

1<=n<=1e5,1<=m<=6e4
保证两种操作的数量相同
1<=w<=1e9,1<=u,v<=n,-1e9<=l,r<=1e9
所有数据保证合法