时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述
【题目背景】
2019年,nzhtl挑战10分钟手写平衡树,一战告捷!
2023年,在华农校赛,聪明的你,需要几分钟来A掉这道题呢?
【题目描述】
给你一棵树,默认1号节点为根节点,每条边都有边权,要求你维护以下操作
-
1 x y :查寻节点x到y的路径上边权的平方和
-
2 x y z :将节点x到节点y的路径所经过的边的边权增加z
-
3 x y z :将节点x到节点y的路径所经过的边的边权修改为z
输入描述:
第一行两个数n,m)
接下来n-1行,每行3个数x,y,z,表示s与y之间有一条边权为z的边)
接下来m行,表示你所需要维护的操作
输出描述:
对于每一次的操作1,输出一个数,表示两点路径途径边的边权的平方和
由于答案可能很大,因此只需输出对1e9+7取模的结果即可
示例1
输入
复制
8 5
1 2 1
1 3 5
1 6 1
1 7 10
1 8 10
2 4 3
2 5 5
3 6 4 5
1 6 4
1 2 5
2 8 5 5
1 8 6