UOJ 207 共價大爺遊長沙 LCT

2021-08-21 15:20:33 字數 1381 閱讀 6637

(為啥我傻了吧唧的拆了點)

集合中的每一對點隨即乙個權值,然後再樹上兩個點分別異或這個權值,最後每次詢問統計其中一邊的子樹的異或和是不是所有點對的權值的異或和即可。

#include

#include

#include

#include

#include

#include

#include

#include

#define uint unsigned long long

#define hv(x,y) ((uint)x*int_max+y)

#define mp make_pair

#define fir first

#define sec second

#define gc getchar()

#define n 200010

#define m 300010

#define debug(x) cerr<<#x<<"="<#define sp <<" "

#define ln typedef pair

pii;

inline int inn()

struct rand

inline uint operator()()

}rnd;

unordered_map

eid;pii sid[m];int pf[n];

uint s[n],val[n],sv[n];int fa[n],ch[n][2],rev[n];

inline int gw(int x)

inline int push_up(int x)

inline int push_down(int x)

inline int setc(int x,int y,int z)

inline int rotate(int x)

inline int all_down(int x)

inline int splay(int x,int tar=0)

inline int expose(int x)

inline int splice(int x)

inline int access(int x)

inline int evert(int x)

inline int link(int x,int y)

inline int cut(int x,int y)

inline int update(int x,uint v)

inline uint query(int x,int y,uint v=0)

int main()

return test_id-test_id+0;

}

uoj 207 共價大爺遊長沙

miaom又來做lct了!lych 無敵 由於不是很懂lct子樹資訊維護的那套理論,想了好久 搞得樹剖的子樹維護就會了一樣!首先是乙個很巧妙的轉化 將邊在鏈上轉化為這條邊能將鏈的頂點分開。給每組頂賦乙個隨機權,每次可以把邊斷掉,查詢每個聯通塊內權值異或和是否等於所有頂點權值異或和,就是子樹異或和。然...

UOJ207 共價大爺遊長沙

uoj 神題 給每個點對隨機乙個權值,把這兩個點的權值異或上這個隨機的值 用l ctl ct 維護子樹資訊,若子樹異或和為所有點對的異或和那麼就是答案 大常數 include define rg register define il inline define fill a,b memset a,b...

UOJ207 共價大爺遊長沙

link 我們知道一條邊被所有路徑經過就是其乙個端點的子樹中包含了所有路徑的一端。那麼我們可以給每條路徑的端點rand乙個隨機權值,然後用lct維護子樹異或和,查詢就是看子樹異或和是否等於所有隨機權值的異或和。lct維護子樹資訊 單點修改就是多維護乙個虛子樹資訊,改變虛邊的時候修改一下就好了。這個方...