# Find the node whose xor with x gives minimum 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 minimum.
Examples:

Input:

x = 15
Output:
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 minimum value.
Below is the implementation of above approach:

## C++

 // C++ implementation of the approach#include using namespace std; int minimum = INT_MAX, x, ans; vector graph[100];vector weight(100); // Function to perform dfs to find// the minimum xored valuevoid dfs(int node, int parent){    // If current value is less than    // the current minimum    if (minimum > (weight[node] ^ x)) {        minimum = weight[node] ^ x;        ans = node;    }    for (int to : graph[node]) {        if (to == parent)            continue;        dfs(to, node);    }} // Driver codeint 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;}

## Java

 // Java implementation of the approachimport java.util.*;import java.lang.*; class GFG {     static int minimum = Integer.MAX_VALUE, x, ans;     @SuppressWarnings("unchecked")    static Vector[] graph = new Vector[100];    static int[] weight = new int[100];     // This block is executed even before main() function    // This is necessary otherwise this program will    // throw "NullPointerException"    static    {        for (int i = 0; i < 100; i++)            graph[i] = new Vector<>();    }     // Function to perform dfs to find    // the minimum xored value    static void dfs(int node, int parent)     {         // If current value is less than        // the current minimum        if (minimum > (weight[node] ^ x))         {            minimum = weight[node] ^ x;            ans = node;        }        for (int to : graph[node])         {            if (to == parent)                continue;            dfs(to, node);        }    }     // Driver Code    public static void main(String[] args)     {        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].add(2);        graph[2].add(3);        graph[2].add(4);        graph[1].add(5);         dfs(1, 1);         System.out.println(ans);    }} // This code is contributed by SHUBHAMSINGH10

## C#

## Python3

 # Python implementation of the approachfrom sys import maxsize minimum, x, ans = maxsize, None, None graph = [[] for i in range(100)]weight = [0] * 100 # Function to perform dfs to find# the minimum xored valuedef dfs(node, parent):    global x, ans, graph, weight, minimum     # If current value is less than    # the current minimum    if minimum > weight[node] ^ x:        minimum = weight[node] ^ x        ans = node     for to in graph[node]:        if to == parent:            continue        dfs(to, node) # Driver Codeif __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) # This code is contributed by# sanjeev2552

## Javascript



Output:
3

Time Complexity: O(N) where N is the number of nodes in the graph.
Space Complexity: O(N)

Previous
Next