給定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...