P2420 讓我們異或吧

2022-06-02 07:42:06 字數 1736 閱讀 1474

對於異或,就是將之前的求和的+號改為^ 即可 其他完全一樣

1 #include2

using

namespace

std;

3 typedef long

long

ll;4

const

int maxn=200000+10;5

intn,m,r;6//

見題意7

intw[maxn],wt[maxn];8//

鏈式前向星陣列,w、wt初始點權陣列

9int

son[maxn],id[maxn],fa[maxn],cnt,dep[maxn],siz[maxn],top[maxn];

10//

son重兒子編號,id新編號,fa父親節點,cnt dfs_clock/dfs序,dep深度,siz子樹大小,top當前鏈頂端節點

11//

查詢答案

12struct

node

13g[maxn<<2]; int head[maxn]; int

num;

16struct

tre17

tree[maxn<<2

];21

void add(int u,int v,int

w)22

26void build(int l,int r,int

root)

37int mid=l+r>>1

;38 build(l,mid,root<<1

);39 build(mid+1,r,root<<1|1

);40 tree[root].sum=tree[root<<1].sum^tree[root<<1|1

].sum;41}

4243

int query(int l,int r,int

root)

48int mid=l+r>>1;49

int ans=0;50

if(l<=mid) ans^=query(l,r,root<<1

);51

if(r>mid) ans^=query(l,r,root<<1|1

);52

return

ans;53}

5455

void dfs1(int u,int f,int deep)68}

6970

void dfs2(int u,int topf)81}

82int qrange(int x,int

y)89

//直到兩個點處於一條鏈上

90if(dep[x]>dep[y])swap(x,y); //

把x點深度更深的那個點

91if(x!=y)

92 ans^=query(id[x]+1,id[y],1); //

這時再加上此時兩個點的區間和即可

93return

ans;94}

95void

init()

96100

intmain()

109 dfs1(1,0,1

);110 dfs2(1,1

);111 build(1,n,1

);112

intt;

113 scanf("

%d",&t);

114while(t--)

119return0;

120 }

P2420 讓我們異或吧

p2420 讓我們異或吧異或是一種神奇的運算,大部分人把它總結成不進製加法.在生活中 xor運算也很常見。比如,對於乙個問題的回答,是為1,否為0.那麼 a是否是男生 xor b是否是男生 a和b是否能夠成為情侶 好了,現在我們來製造和處理一些複雜的情況。比如我們將給出一顆樹,它很高興自己有n個結點...

P2420 讓我們異或吧

異或是一種神奇的運算,大部分人把它總結成不進製加法.在生活中 xor運算也很常見。比如,對於乙個問題的回答,是為1,否為0.那麼 a是否是男生 xor b是否是男生 a和b是否能夠成為情侶 好了,現在我們來製造和處理一些複雜的情況。比如我們將給出一顆樹,它很高興自己有n個結點。樹的每條邊上有乙個權值...

P2420 讓我們異或吧(倍增)

異或是一種神奇的運算,大部分人把它總結成不進製加法.在生活中 xor運算也很常見。比如,對於乙個問題的回答,是為1,否為0.那麼 a是否是男生 xor b是否是男生 a和b是否能夠成為情侶 好了,現在我們來製造和處理一些複雜的情況。比如我們將給出一顆樹,它很高興自己有n個結點。樹的每條邊上有乙個權值...