異或是一種神奇的運算,大部分人把它總結成不進製加法.
在生活中…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:1 4 9644
2 5 15004
3 1 14635
5 3 9684
32 4
5 41 1
975對於40%的資料,有1 ≤ n,m ≤ 3000;14675
0
對於100%的資料,有1 ≤ n ,m≤ 100000。
1/*2**兩點之間權值異或等於
3兩點分別到根節點的異或的異或
4也就是兩點到根節點的異或減去
5兩倍的lca到根節點的異或
6但是 x xor x = x;
7所以不用求lca 直接兩點分別到根節點的異或再異或即可 8*/
9 #include 10 #include 11
12const
int maxn=100010;13
14int
n,m;
1516
struct
node ;
21 node e[maxn<<2
];22
23int
head[maxn],tot;
2425
intdep[maxn],dis[maxn];
2627 inline void read(int&x)
3334 inline void add(int x,int y,int
v) 40
41void dfs(int now,int
fa) 49}
50return;51
}5253int
hh()
60 dfs(1,0
);61
read(m);
62for(int i=1;i<=m;++i)
66return0;
67}6869
int sb=hh();
70int main()
P2420 讓我們異或吧
p2420 讓我們異或吧異或是一種神奇的運算,大部分人把它總結成不進製加法.在生活中 xor運算也很常見。比如,對於乙個問題的回答,是為1,否為0.那麼 a是否是男生 xor b是否是男生 a和b是否能夠成為情侶 好了,現在我們來製造和處理一些複雜的情況。比如我們將給出一顆樹,它很高興自己有n個結點...
P2420 讓我們異或吧
對於異或,就是將之前的求和的 號改為 即可 其他完全一樣 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 鏈式...
P2420 讓我們異或吧(倍增)
異或是一種神奇的運算,大部分人把它總結成不進製加法.在生活中 xor運算也很常見。比如,對於乙個問題的回答,是為1,否為0.那麼 a是否是男生 xor b是否是男生 a和b是否能夠成為情侶 好了,現在我們來製造和處理一些複雜的情況。比如我們將給出一顆樹,它很高興自己有n個結點。樹的每條邊上有乙個權值...