Luogu P2420 讓我們異或吧

2022-02-23 12:27:19 字數 975 閱讀 9499

兩點之間的路徑的話一定經過它們兩個 lca,這一點已經是顯而易見的,那麼再來看看異或的性質。

$$a\ xor\ b\ xor\ b = a\\ a\ xor\ a=0\\ a\ xor\ 0 = a\\ a\ xor\ b = b\ xor\ a\\ a\ xor\ b\ xor\ c = a\ xor\ (b\ xor\ c)$$

再回到這個題上來,因為 $a\ xor\ b\ xor\ b = a$,所以從根節點出來的一條路徑我們可以預先處理乙個異或和出來。

在詢問的時候再將多餘的路徑給異或掉。設兩點的 lca 為 z,那麼答案就是 $dis[tmp]\ xor\ dis[x]\ xor\ dis[tmp]\ xor\ dis[y]$

有第一條性質 $a\ xor\ b\ xor\ b = a$ 可以化簡上式,答案就變成了 $dis[x]\ xor\ dis[y]$,化簡後我們發現根本就不需要求 lca。

下面給出**。

#include #include 

#include

#include

using

namespace

std;

const

int maxn = 1e5+3

;int n, m, head[maxn], cnt, dis[maxn], rt = 1, fa[maxn][32

];struct edge ed[maxn << 1

];void read(int &x)

while (c <= '

9' && c >= '

0')

x *=f;

}struct

haha

void dfs(int

u) }

}t;int

main()

t.dfs(rt);

read(m);

for(int i=1; i<=m; i++)

}

Luogu P2420 讓我們異或吧

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

洛谷 2420 讓我們異或吧

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

P2420 讓我們異或吧

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