傳送門
顯然 $lct$ 維護,除了翻轉標記,
還要維護加法,乘法和子樹大小
注意模數看起來很小,但是乘的時候還是會爆 $int$ ,所以要用 $unsigned\ int$
**中的標記為延時標記,就是當前節點的標記說明當前節點還沒更新,要等到下傳標記時才更新,個人認為會好寫一些(不用考慮先乘還是先加)
注意乘法標記初始為 $1$ ,乘的時候有可能乘 $0$
#include#include#include
#include
#include
using
namespace
std;
typedef
long
long
ll;typedef unsigned
intuint
;inline
intread()
while(ch>='
0'&&ch<='
9')
return x*f;
}const
int n=2e5+7,mo=51061
;uint c[n][2
],fa[n],val[n],sz[n],sum[n],rev[n],add[n],mul[n];
inline
uint mod(uint x) //
給加法取模
inline void mul(uint &x,uint c) //
乘inline void pushdown(int x)//
下傳標記
if(mul[x]!=1
)
if(add[x])
}inline
void pushup(int x)//
更新節點
inline
void rever(int x)
inline
bool noroot(int x)
inline
void rotate(int
x)inline
void push_tag(int x)//
清空標記
inline
void splay(int
x) rotate(x);
}}inline
void access(int
x)inline
void makeroot(int
x) inline
void split(int x,int
y) inline
void link(int x,int y)
inline
void cut(int x,int y)
intn,m;
intmain()
case'-
':
case'*
':
case'/
': }
}return0;
}
P1501 國家集訓隊 Tree II
p1501 國家集訓隊 tree ii 樹上懶惰標記維護動態路徑模板題 其實做這題也能練一下對 lct 的了解 我們對 x,y 這條路徑修改時 split x,y y 傳到 y 上去就行了 我們發現不管什麼操作都會用到 access 其中把底下的點上旋 splay 的同時會把 y 上的標記取下來 和...
P1501 國家集訓隊 Tree II
一棵n個點的樹,每個點的初始權值為1。對於這棵樹有q個操作,每個操作為以下四種操作之一 第一行兩個整數n,q 接下來n 1行每行兩個正整數u,v,描述這棵樹 接下來q行,每行描述乙個操作 對於每個 對應的答案輸出一行 3 2 1 22 3 1 3 4 1 1410 的資料保證,1 leq n,q l...
國家集訓隊 Tree I
題目 給你乙個無向帶權連通圖,每條邊是黑色或白色。讓你求一棵最小權的恰好有nee dneed need 條白色邊的生成樹。題目保證有解。思路 凸優化裸題,要注意的就是,優先選白色 優先選黑色也行 主要是同一斜率可能會切到很多點,那麼就要有乙個標準,要麼選最小點,要麼選最大。另外求出來的點不一定是ne...