# Kth largest node among all directly connected nodes to the given node in an undirected graph

• Difficulty Level : Hard
• Last Updated : 05 Aug, 2021

Given two arrays u and v, representing a graph such that there is an undirected edge from u[i] to v[i] (0 ≤ v[i], u[i] < N) and each node has some value val[i] (0 ≤ i < N). For each node, if the nodes connected directly to it are sorted in descending order according to their values (in case of equal values, sort it according to their indices in ascending order), print the number of the node at kth position. If total nodes are < k then print -1.

Examples:

Input: u[] = {0, 0, 1}, v[] = {2, 1, 2}, val[] = {2, 4, 3}, k = 2
Output:

For 0 node, the nodes directly connected to it are 1 and 2
having values 4 and 3 respectively, thus node with 2nd largest value is 2.
For 1 node, the nodes directly connected to it are 0 and 2
having values 2 and 3 respectively, thus node with 2nd largest value is 0.
For 2 node, the nodes directly connected to it are 0 and 1
having values 2 and 4 respectively, thus node with 2nd largest value is 0.

Input: u[] = {0, 2}, v[] = {2, 1}, val[] = {2, 4, 3}, k = 2
Output:
-1
-1

Approach: The idea is to store the nodes directly connected to a node along with their values in a vector and sort them in increasing order, and the kth largest value for a node, having n number of nodes directly connected to it, will be (n – k)th node from last.

Below is the implementation of the above approach:

## C++

 `// C++ implementation of the approach` `#include ` `using` `namespace` `std;`   `// Function to print Kth node for each node` `void` `findKthNode(``int` `u[], ``int` `v[], ``int` `n, ``int` `val[], ``int` `V, ``int` `k)` `{`   `    ``// Vector to store nodes directly` `    ``// connected to ith node along with` `    ``// their values` `    ``vector > g[V];`   `    ``// Add edges to the vector along with` `    ``// the values of the node` `    ``for` `(``int` `i = 0; i < n; i++) {` `        ``g[u[i]].push_back(make_pair(val[v[i]], v[i]));` `        ``g[v[i]].push_back(make_pair(val[u[i]], u[i]));` `    ``}`   `    ``// Sort neighbors of every node` `    ``// and find the Kth node` `    ``for` `(``int` `i = 0; i < V; i++) {` `        ``if` `(g[i].size() > 0)` `            ``sort(g[i].begin(), g[i].end());`   `        ``// Get the kth node` `        ``if` `(k <= g[i].size())` `            ``printf``(``"%d\n"``, g[i][g[i].size() - k].second);`   `        ``// If total nodes are < k` `        ``else` `            ``printf``(``"-1\n"``);` `    ``}`   `    ``return``;` `}`   `// Driver code` `int` `main()` `{` `    ``int` `V = 3;` `    ``int` `val[] = { 2, 4, 3 };` `    ``int` `u[] = { 0, 0, 1 };` `    ``int` `v[] = { 2, 1, 2 };`   `    ``int` `n = ``sizeof``(u) / ``sizeof``(``int``);` `    ``int` `k = 2;`   `    ``findKthNode(u, v, n, val, V, k);`   `    ``return` `0;` `}`

## Java

 `// Java implementation of the approach ` `import` `java.util.*;`   `class` `GFG` `{`   `// pair class` `static` `class` `pair` `{` `    ``int` `first,second;` `    ``pair(``int` `a,``int` `b)` `    ``{` `        ``first = a;` `        ``second = b;` `    ``}` `}`   `// Function to print Kth node for each node ` `static` `void` `findKthNode(``int` `u[], ``int` `v[], ``int` `n, ` `                        ``int` `val[], ``int` `V, ``int` `k) ` `{ `   `    ``// Vector to store nodes directly ` `    ``// connected to ith node along with ` `    ``// their values ` `    ``Vector> g = ``new` `Vector>();` `    `  `    ``for``(``int` `i = ``0``; i < V; i++)` `    ``g.add(``new` `Vector());`   `    ``// Add edges to the Vector along with ` `    ``// the values of the node ` `    ``for` `(``int` `i = ``0``; i < n; i++) ` `    ``{ ` `        ``g.get(u[i]).add(``new` `pair(val[v[i]], v[i])); ` `        ``g.get(v[i]).add(``new` `pair(val[u[i]], u[i])); ` `    ``} `   `    ``// Sort neighbors of every node ` `    ``// and find the Kth node ` `    ``for` `(``int` `i = ``0``; i < V; i++)` `    ``{ ` `        ``if` `(g.get(i).size() > ``0``) ` `            ``Collections.sort(g.get(i),``new` `Comparator() ` `        ``{ ` `            ``public` `int` `compare(pair p1, pair p2) ` `            ``{ ` `                ``return` `p1.first - p2.first; ` `            ``} ` `        ``}); `   `        ``// Get the kth node ` `        ``if` `(k <= g.get(i).size()) ` `            ``System.out.printf(``"%d\n"``, g.get(i).get(g.get(i).size() - k).second); `   `        ``// If total nodes are < k ` `        ``else` `            ``System.out.printf(``"-1\n"``); ` `    ``} `   `    ``return``; ` `} `   `// Driver code ` `public` `static` `void` `main(String args[])` `{ ` `    ``int` `V = ``3``; ` `    ``int` `val[] = { ``2``, ``4``, ``3` `}; ` `    ``int` `u[] = { ``0``, ``0``, ``1` `}; ` `    ``int` `v[] = { ``2``, ``1``, ``2` `}; `   `    ``int` `n = u.length; ` `    ``int` `k = ``2``; `   `    ``findKthNode(u, v, n, val, V, k); ` `}` `} `   `// This code is contributed by Arnab Kundu`

## Python3

 `# Python3 implementation of the approach `   `# Function to print Kth node for each node ` `def` `findKthNode(u, v, n, val, V, k): `   `    ``# Vector to store nodes directly connected ` `    ``# to ith node along with their values ` `    ``g ``=` `[[] ``for` `i ``in` `range``(V)]`   `    ``# Add edges to the vector along ` `    ``# with the values of the node ` `    ``for` `i ``in` `range``(``0``, n):  ` `        ``g[u[i]].append((val[v[i]], v[i])) ` `        ``g[v[i]].append((val[u[i]], u[i])) `   `    ``# Sort neighbors of every node ` `    ``# and find the Kth node ` `    ``for` `i ``in` `range``(``0``, V):` `        ``if` `len``(g[i]) > ``0``: ` `            ``g[i].sort() `   `        ``# Get the kth node ` `        ``if` `k <``=` `len``(g[i]): ` `            ``print``(g[i][``-``k][``1``]) `   `        ``# If total nodes are < k ` `        ``else``:` `            ``print``(``"-1"``) ` `     `  `    ``return`   `# Driver code ` `if` `__name__ ``=``=` `"__main__"``:` ` `  `    ``V ``=` `3` `    ``val ``=` `[``2``, ``4``, ``3``]  ` `    ``u ``=` `[``0``, ``0``, ``1``] ` `    ``v ``=` `[``2``, ``1``, ``2``]  ` `    ``n, k ``=` `len``(u), ``2`   `    ``findKthNode(u, v, n, val, V, k) `   `# This code is contributed by Rituraj Jain`

## C#

 `// C# implementation of the approach ` `using` `System;` `using` `System.Collections;` `using` `System.Collections.Generic;` ` `  `class` `GFG` `{` ` `  `// pair class` `class` `pair` `{` `    ``public` `int` `first,second;` `    ``public` `pair(``int` `a,``int` `b)` `    ``{` `        ``first = a;` `        ``second = b;` `    ``}` `}` ` `  `class` `sortHelper : IComparer` `{` `   ``int` `IComparer.Compare(``object` `a, ``object` `b)` `   ``{` `      ``pair first = (pair)a;` `      ``pair second = (pair)b;` `        `  `      ``return` `first.first - second.first;` `   ``}` `} ` ` `  `// Function to print Kth node for each node ` `static` `void` `findKthNode(``int` `[]u, ``int` `[]v, ``int` `n, ` `                        ``int` `[]val, ``int` `V, ``int` `k) ` `{ ` ` `  `    ``// Vector to store nodes directly ` `    ``// connected to ith node along with ` `    ``// their values ` `    ``ArrayList g = ``new` `ArrayList();     ` `    ``for``(``int` `i = 0; i < V; i++)` `        ``g.Add(``new` `ArrayList());` ` `  `    ``// Add edges to the Vector along with ` `    ``// the values of the node ` `    ``for` `(``int` `i = 0; i < n; i++) ` `    ``{ ` `        ``((ArrayList)g[u[i]]).Add(``new` `pair(val[v[i]], v[i])); ` `        ``((ArrayList)g[v[i]]).Add(``new` `pair(val[u[i]], u[i])); ` `    ``} ` ` `  `    ``// Sort neighbors of every node ` `    ``// and find the Kth node ` `    ``for` `(``int` `i = 0; i < V; i++)` `    ``{ ` `        ``if` `(((ArrayList)g[i]).Count > 0) ` `        ``{` `            ``ArrayList tmp = (ArrayList)g[i];` `            ``tmp.Sort(``new` `sortHelper());` `            ``g[i] = tmp;            ` `        ``}` ` `  `        ``// Get the kth node ` `        ``if` `(k <= ((ArrayList)g[i]).Count) ` `            ``Console.Write(((pair)((ArrayList)g[i])[((ArrayList)g[i]).Count - k]).second+``"\n"``); ` ` `  `        ``// If total nodes are < k ` `        ``else` `            ``Console.Write(``"-1\n"``); ` `    ``} ` `    ``return``; ` `} ` ` `  `// Driver code ` `public` `static` `void` `Main(``string` `[]args)` `{ ` `    ``int` `V = 3; ` `    ``int` `[]val = { 2, 4, 3 }; ` `    ``int` `[]u = { 0, 0, 1 }; ` `    ``int` `[]v = { 2, 1, 2 }; ` `    ``int` `n = u.Length; ` `    ``int` `k = 2; ` `    ``findKthNode(u, v, n, val, V, k); ` `}` `} ` ` `  `// This code is contributed by Pratham76`

## Javascript

 ``

Output:

```2
0
0```

Time Complexity: O(N)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up
Recommended Articles
Page :