洛谷 P2420 讓我們異或吧

2022-05-15 17:45:44 字數 1391 閱讀 5834

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

在生活中…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

32 4

5 41 1

輸出樣例#1:

975

14675

0

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

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

先處理出每個點到根節點的異或值,然後詢問時輸出v[x]異或v[y]即可

#include#define maxn 100001

using

namespace

std;

intn,m,tot,head[maxn],v[maxn],fa[maxn],deep[maxn];

struct

node

a[maxn*2

];void add(int x,int y,int

z)void dfs(int x,int

y)int find(int

x)inline

intread()

while(c<='

9'&&c>='0'

) ans=ans*10+(c-'

0'),c=getchar();

return

ans;

}int

main()

introot;

for(i=1;i<=n;i++)

if(fa[i]==i)

root=i;

dfs(root,root);

m=read();

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

x=read(),y=read(),printf("

%d\n

",v[x]^v[y]);

return0;

}

洛谷 P2420 讓我們異或吧

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

洛谷P2420 讓我們異或吧 DFS

給出一棵樹,每條邊有乙個權值,輸出指定點的路徑異或值。首先,這到題是我在想刷lca lca的時候遇到的,結果這道標籤是lca lca的題目我卻想不到為什們要用lca lca,乙個dfs dfs就可以過。其實要求兩個點的路徑異或值就是xor roo t x xor roo t x xor roo t ...

洛谷P2420 讓我們異或吧(樹上異或)

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