# Significado del título
dado un árbol de n nodos, el árbol tiene un lado peso, elija dos puntos cualesquiera del árbol, encontrar los dos puntos en el camino del valor máximo de la exclusiva o hasta
# Explicaciones
La matriz D [x] xor denota el valor del nodo raíz a todos los lados en el camino correcto x, y la estructura es un árbol, todos los nodos determinados por dfs d
determinar todas matriz D, el nodo x al nodo y todos XOR es el peso D [x] xor D [Y ], si no se aparten de la raíz de la duda
Si un nodo es un nodo de antepasado a otro nodo, de acuerdo con la naturaleza de la XOR puede ser compensado de la raíz a la trayectoria de nodo antepasado común
del problema original se convierte en D [1] ~ [n] D seleccionar cualquiera de los dos números, el máximo buscan XOR.
1 #include <bits / STDC ++ h.> 2 usando espacio de nombres std; 3 const int N = 1e5 + 10 ; 4 int n; 5 int h [N], e [N * 2 ], ne [N * 2 ], w [N * 2 ], idx; 6 int d [N]; 7 int trie [N * 31 ] [ 2 ], tot = 1 ; 8 inline void add ( int x, int y, int z) { 9 e [idx] = y; 10 w [idx] = z; 11 ne [idx] = h [x]; 12 h [x] = idx ++ ; 13 } 14 inline int dfs ( int u, int f, int suma) { 15 d [u] = suma; 16 para ( int i = h [u]; i = - 1 ; i = ne [i]) { 17 int j = e [i]; 18 Si (j = f!) Dfs (j, u, suma ^ w [i]); 19 } 20 } 21 inline void inserto (int x) { 22 int p = 1 ; 23 para ( int j = 30 ; j> = 0 ; j-- ) { 24 int ch = (x >> j) y 1 ; 25 si (! Trie [p] [ch]) 26 trie [p] [ch] = ++ tot; 27 p = trie [p] [ch]; 28 } 29 } 30 inline int búsqueda ( int x) { 31 int res = 0 ; 32 int p =1 ; 33 para ( int i = 30 ; i> = 0 ; i-- ) { 34 int ch = x >> i y 1 ; 35 Si (trie [p] [! Ch]) { 36 res + = 1 << i; 37 p = trie [p] [! ch]; 38 } 39 más 40 p = trie [p] [ch]; 41 } 42 de retorno res; 43 } 44 int main () { 45 ios :: sync_with_stdio ( 0 ); 46 cin.tie ( 0 ); 47 cout.tie ( 0 ); 48 memset (h, - 1 , sizeof h); 49 cin >> n; 50 para ( int i = 0 ; i <n; i ++ ) { 51 int u, v, w; 52 cin >> T >> >> v w; 53 add (u, v, w); 54 add (v, u, w); 55 } 56 dfs ( 0 , - 1 , 0); 57 int ans = 0 ; 58 para ( int i = 0 ; i <n; i ++ ) 59 { 60 inserto (d [i]); 61 ans = max (ans, búsqueda (d [i])); 62 } 63 tribunal << ans; 64 }