Luogu2420 讓我們異或吧

2021-08-19 03:45:31 字數 1144 閱讀 5984

題目描述

異或是一種神奇的運算,大部分人把它總結成不進製加法.

在生活中…xor運算也很常見。比如,對於乙個問題的回答,是為1,否為0.那麼:

(a是否是男生 )xor( b是否是男生)=a和b是否能夠成為情侶

好了,現在我們來製造和處理一些複雜的情況。比如我們將給出一顆樹,它很高興自己有n個結點。樹的每條邊上有乙個權值。我們要進行m次詢問,對於每次詢問,我們想知道某兩點之間的路徑上所有邊權的異或值。

輸入輸出格式

輸入格式:

輸入檔案第一行包含乙個整數n,表示這顆開心的樹擁有的結點數,以下有n-1行,描述這些邊,每行有3個數,u,v,w,表示u和v之間有一條權值為w的邊。接下來一行有乙個整數m,表示詢問數。之後的m行,每行兩個數u,v,表示詢問這兩個點之間的路徑上的權值異或值。

輸出格式:

輸出m行,每行乙個整數,表示異或值

輸入輸出樣例

輸入樣例#1:

5 1 4 9644

2 5 15004

3 1 14635

5 3 9684

3 2 4

5 4

1 1輸出樣例#1:

975

14675 0說明

對於40%的資料,有1 ≤ n,m ≤ 3000;

對於100%的資料,有1 ≤ n ,m≤ 100000。

題解水的不行。。。

我們只需要將這棵樹轉成有根數,df

s dfs

下去記錄每個點到樹根的路徑的異或和。由於異或的神奇性質,在統計兩點間路徑的異或和的時候就可以直接將兩個點的異或和異或起來,重複的部分會自動消掉。

**

#include

using

namespace

std;

const

int m=1e5+5;

struct sd;

int sum[m],n,m;

vector

mmp[m];

void in()

); mmp[b].push_back((sd));

}}void dfs(int v,int f,int s)

}void ac()

}int main()

luogu2420 讓我們異或吧

這題就沒人用並查集嗎,我弱弱地問一句 然而是先並,後查的 建立乙個帶權並查集 g x 表示節點x到他直接父親的異或值 根據異或的可亂搞的性質 注意並查集一定要先getf一下 然後合併同根據異或可亂搞的性質 rt所示 mspaint真心毒瘤 查詢的時候先getf一下 然後直接g u g v 即可 in...

luogu2420 讓我們異或和吧

小知識 異或xor 滿足結合律 交換律。另外a xor a 0,也就是說a xor b xor c e,那麼b xor c e xor a,也就是說可以字首和。做法一 樹鏈剖分,線段樹維護。複雜度o nlog 2n 注意坑點 因為權值在邊上,所以交界處的值不能算進去 做法二 樹上字首和,用s x 表...

洛谷 2420 讓我們異或吧

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