# Find the node whose xor with x gives maximum value

Given a tree, and the weights of all the nodes and an integer **x**, the task is to find a node **i** such that **weight[i] xor x** is maximum.

**Examples:**

Input:

x = 15

Output:1

Node 1: 5 xor 15 = 10

Node 2: 10 xor 15 = 5

Node 3: 11 xor 15 = 4

Node 4: 8 xor 15 = 7

Node 5: 6 xor 15 = 9

**Approach:** Perform dfs on the tree and keep track of the node whose weighted xor with **x** gives the maximum value.

Below is the implementation of the above approach:

## C++

`// C++ implementation of the approach ` `#include <bits/stdc++.h> ` `using` `namespace` `std; ` ` ` `int` `maximum = INT_MIN, x, ans; ` ` ` `vector<` `int` `> graph[100]; ` `vector<` `int` `> weight(100); ` ` ` `// Function to perform dfs to find ` `// the maximum xored value ` `void` `dfs(` `int` `node, ` `int` `parent) ` `{ ` ` ` `// If current value is less than ` ` ` `// the current maximum ` ` ` `if` `(maximum < (weight[node] ^ x)) { ` ` ` `maximum = weight[node] ^ x; ` ` ` `ans = node; ` ` ` `} ` ` ` `for` `(` `int` `to : graph[node]) { ` ` ` `if` `(to == parent) ` ` ` `continue` `; ` ` ` `dfs(to, node); ` ` ` `} ` `} ` ` ` `// Driver code ` `int` `main() ` `{ ` ` ` `x = 15; ` ` ` ` ` `// Weights of the node ` ` ` `weight[1] = 5; ` ` ` `weight[2] = 10; ` ` ` `weight[3] = 11; ` ` ` `weight[4] = 8; ` ` ` `weight[5] = 6; ` ` ` ` ` `// Edges of the tree ` ` ` `graph[1].push_back(2); ` ` ` `graph[2].push_back(3); ` ` ` `graph[2].push_back(4); ` ` ` `graph[1].push_back(5); ` ` ` ` ` `dfs(1, 1); ` ` ` ` ` `cout << ans; ` ` ` ` ` `return` `0; ` `} ` |

*chevron_right*

*filter_none*

## Python3

# Python3 implementation of the approach

import sys

maximum = -sys.maxsize – 1

graph = [[0 for i in range(100)]

for j in range(100)]

weight = [0 for i in range(100)]

ans = []

# Function to perform dfs to find

# the maximum xored value

def dfs(node, parent):

global maximum

# If current value is less than

# the current maximum

if (maximum < (weight[node] ^ x)):
maximum = weight[node] ^ x
ans.append(node)
for to in graph[node]:
if (to == parent):
continue
dfs(to, node)
# Driver code
if __name__ == '__main__':
x = 15
# Weights of the node
weight[1] = 5
weight[2] = 10
weight[3] = 11
weight[4] = 8
weight[5] = 6
# Edges of the tree
graph[1].append(2)
graph[2].append(3)
graph[2].append(4)
graph[1].append(5)
dfs(1, 1)
print(ans[0])
# This code is contributed by
# Surendra_Gangwar
[tabbyending]

**Output:**

1

## Recommended Posts:

- Find the node whose sum with X has maximum set bits
- Find the node whose absolute difference with X gives maximum value
- Find the maximum node at a given level in a binary tree
- Find the node with maximum value in a Binary Search Tree
- Find the node with maximum value in a Binary Search Tree using recursion
- Node having maximum sum of immediate children and itself in n-ary tree
- Sum of the distances from every node to all other nodes is maximum
- Maximum XOR with given value in the path from root to given node in the tree
- Get maximum left node in binary tree
- Maximum number of nodes which can be reached from each node in a graph.
- Print the node with the maximum degree in the prufer sequence
- Maximum difference between node and its ancestor in Binary Tree
- Iterative Segment Tree (Range Maximum Query with Node Update)
- Implementing a BST where every node stores the maximum number of nodes in the path till any leaf
- Minimum and maximum node that lies in the path connecting two nodes in a Binary Tree

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.