博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【洛谷1501】[国家集训队] Tree II(LCT维护懒惰标记)
阅读量:5221 次
发布时间:2019-06-14

本文共 682 字,大约阅读时间需要 2 分钟。

大致题意: 有一棵初始边权全为\(1\)的树,四种操作:将两点间路径边权都加上一个数,删一条边、加一条新边,将两点间路径边权都加上一个数,询问两点间路径权值和。

序列版

这道题有一个序列版:。

看题目就知道是一道线段树板子题。

这种题目移到树上路径中,且要删边加边,是无疑了。

\(LCT\)维护懒惰标记

可以说,这道题就是上面那题的翻版。

同样维护两个标记:乘法标记加法标记,加上原有的翻转标记,共三个标记。

具体细节其实可以详见上面提到的那道线段树板子题,这里就不多说了。

主要是要注意标记下传与更新的优先级问题,应该是乘法先,加法后,至于翻转标记在前在后都无所谓。

代码

#include
#define N 100000#define MOD 51061#define swap(x,y) (x^=y^=x^=y)#define Inc(x,y) ((x+=(y))>=MOD&&(x-=MOD))using namespace std;int n,ee,lnk[N+5];class Class_FIO{ private: #define Fsize 100000 #define tc() (A==B&&(B=(A=Fin)+fread(Fin,1,Fsize,stdin),A==B)?EOF:*A++) #define pc(ch) (FoutSize

转载于:https://www.cnblogs.com/chenxiaoran666/p/Luogu1501.html

你可能感兴趣的文章