Description
题目链接:Luogu 1501
一棵 $n$ 个点的树,每个点的初始权值为 $1$。对于这棵树有 $q$ 个操作,每个操作为以下四种操作之一:
+ u v c
:将 $u$ 到 $v$ 的路径上的点的权值都加上 $c$。- u1 v1 u2 v2
:将树中原有的边 $(u_1,v_1)$ 删除,加入一条新边 $(u_2,v_2)$,保证操作完之后仍然是一棵树。* u v c
:将 $u$ 到 $v$ 的路径上的点的权值都乘上 $c$。/ u v
:询问u到v的路径上的点的权值和,求出答案对于 $51061$ 的余数。
数据范围:$1\le n,q\le 10^5$,$0\le c\le 10^4$
Solution
其实 $\text{LCT}$ 中的懒标记下传和线段树中的是一样的,并且都是按照乘法比加法优先的原则进行的。
这里主要提几个坑点:
- 我们发现 $\text{mod}=51061$,但是 $\text{mod}^2=2607225721>2147483647$,因此我们要开 $\text{unsigned int}$ 或者 $\text{long long}$。
- 题目中没有保证操作都是合法的!也就是说 $\text{link}$ 或 $\text{cut}$ 时可能不合法,需要判断不合法情况。
时间复杂度:$O(q\log n)$
Code
1 |
|