LCT動態樹 基礎模板(luogu P3690)

2021-09-27 16:34:00 字數 1297 閱讀 9191

給定n個點以及每個點的權值,要你處理接下來的m個操作。操作有4種。操作從0到3編號。點從1到n編號。

0:後接兩個整數(x,y),代表詢問從x到y的路徑上的點的權值的xor和。保證x到y是聯通的。

1:後接兩個整數(x,y),代表連線x到y,若x到y已經聯通則無需連線。

2:後接兩個整數(x,y),代表刪除邊(x,y),不保證邊(x,y)存在。

3:後接兩個整數(x,y),代表將點x上的權值變成y。

#include#define il inline

#define pb push_back

#define ms(_data,v) memset(_data,v,sizeof(_data))

#define sz(a) int((a).size())

#define ls ch[x][0]

#define rs ch[x][1]

using namespace std;

typedef long long ll;

const ll inf=0x3f3f3f3f;

const int n=3e5+5;

template il void read(_tp&x)

//il int add(int &x,ll y)

//il int mul(int &x,ll y)

int f[n],ch[n][2],v[n],s[n],st[n];

bool r[n];

il bool isroot(int x)

il void pushup(int x)

il void reverse(int x)

il void pushdown(int x)

}il void rotate(int x)

il void splay(int x)

pushup(x);

}il void access(int x)

}il void makeroot(int x)

il int findroot(int x)

il void split(int x,int y)

il void link(int x,int y)

il void cut(int x,int y)}/*

//保證合法的情況下

il void link(int x,int y)

il void cut(int x,int y)

*/int n,m,type,x,y;

int main()

} return 0;

}

動態樹LCT 模板

題目描述 輸入 第一行兩個整數n和m 接下來一行中n個整數表示初始點權 接下來m行每行乙個操作如上表所示。輸出 對於每乙個連線操作,若p和q不連通,輸出yes,並新增這條邊 否則輸出no 對於每乙個刪除操作,若p和q間有邊,輸出yes,並刪除這條邊,否則輸出no 對於每乙個查詢最大及查詢和,若p和q...

詳解動態樹 LCT)

lct的功能 題意 乙個圖,有n個點,一開始圖中沒有邊。三種操作 connect u v 在點u和點v之間建一條邊。保證所有connect操作不會重複建邊。destroy u v 摧毀點u到點v之間的邊。保證所有destroy操作將摧毀的是一條存在的邊。query u v 詢問點u和點v是否聯通,是...

動態樹 LCT 錯誤總結

彙總犯過的一大堆神奇錯誤。例 node findroot node u return u 解決方法 寫完後搜尋所有 ch,檢查是否之前已pushdown 解決方法 使u uu結點懶標記意義表示u uu的兒子結點需更新,而不是u uu需要更新。懶標記下傳後未清空 例 void pushdown 例 n...