P1501 國家集訓隊 Tree II

2022-05-19 11:29:06 字數 1537 閱讀 8787

傳送門

顯然 $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...