# k’th heaviest adjacent node in a graph where each vertex has weight

Given a positive number k and an undirected graph of N nodes, numbered from 0 to N-1, each having a weight associated with it. Note that this is different from a normal weighted graph where every edge has a weight.

For each node, if we sort the nodes (according to their weights), which are directly connected to it, in decreasing order, then what will be the number of the node at the kth position. Print kth node number(not weight) for each node and if it does not exist, print -1.

Examples:

```Input : N = 3, k = 2, wt[] = { 2, 4, 3 }.
edge 1: 0 2
edge 2: 0 1
edge 3: 1 2

Output : 2 0 0
Graph:
0 (weight 2)
/
/
1-----2
(weight 4)  (weight 3)
For node 0, sorted (decreasing order) nodes
according to their weights are node 1(weight 4),
node 2(weight 3). The node at 2nd position for
node 0 is node 2.
For node 1, sorted (decreasing order) nodes
according to their weight are node 2(weight 3),
node 0(weight 2). The node at 2nd position for
node 1 is node 0.
For node 2, sorted (decreasing order) nodes
according to their weight are node 1(weight 4),
node 0(weight 2). The node at 2nd position for
node 2 is node 0.
```

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

The idea is to sort Adjacency List of each node on the basis of adjacent node weights.
First, create Adjacency List for all the nodes. Now for each node, all the nodes which are directly connected to it stored in a list. In adjacency list, store the nodes along with their weights.

Now, for each node sort the weights of all nodes which are directly connected to it in reverse order, and then print the node number which is at kth position in the list of each node.

Below is implementation of this approach:

## C++

 `// C++ program to find Kth node weight after s ` `// orting of nodes directly connected to a node. ` `#include ` `using` `namespace` `std; ` ` `  `// Print Kth node number for each node after sorting ` `// connected node according to their weight. ` `void` `printkthnode(vector< pair<``int``, ``int``> > adj[], ` `                        ``int` `wt[], ``int` `n, ``int` `k) ` `{ ` `    ``// Sort Adjacency List of all node on the basis ` `    ``// of its weight. ` `    ``for` `(``int` `i = 0; i < n; i++) ` `      ``sort(adj[i].begin(), adj[i].end()); ` ` `  `    ``// Printing Kth node for each node. ` `    ``for` `(``int` `i = 0; i < n; i++) ` `    ``{ ` `        ``if` `(adj[i].size() >= k) ` `          ``cout << adj[i][adj[i].size() - k].second; ` `        ``else` `          ``cout << ``"-1"``; ` `    ``} ` `} ` ` `  `// Driven Program ` `int` `main() ` `{ ` `    ``int` `n = 3, k = 2; ` `    ``int` `wt[] = { 2, 4, 3 }; ` ` `  `    ``// Making adjacency list, storing the nodes ` `    ``// along with their weight. ` `    ``vector< pair<``int``, ``int``> > adj[n+1]; ` ` `  `    ``adj.push_back(make_pair(wt, 2)); ` `    ``adj.push_back(make_pair(wt, 0)); ` ` `  `    ``adj.push_back(make_pair(wt, 1)); ` `    ``adj.push_back(make_pair(wt, 0)); ` ` `  `    ``adj.push_back(make_pair(wt, 2)); ` `    ``adj.push_back(make_pair(wt, 1)); ` ` `  `    ``printkthnode(adj, wt, n, k); ` `    ``return` `0; ` `} `

## Python3

 `# Python3 program to find Kth node  ` `# weight after sorting of nodes ` `# directly connected to a node. ` ` `  `# PrKth node number for each node  ` `# after sorting connected node  ` `# according to their weight.  ` `def` `printkthnode(adj, wt, n, k): ` `     `  `    ``# Sort Adjacency List of all  ` `    ``# node on the basis of its weight. ` `    ``for` `i ``in` `range``(n): ` `        ``adj[i].sort()  ` ` `  `    ``# Printing Kth node for each node. ` `    ``for` `i ``in` `range``(n): ` `        ``if` `(``len``(adj[i]) >``=` `k):  ` `            ``print``(adj[i][``len``(adj[i]) ``-`  `                             ``k][``1``], end ``=` `" "``) ` `        ``else``: ` `            ``print``(``"-1"``, end ``=` `" "``) ` ` `  `# Driver Code ` `if` `__name__ ``=``=` `'__main__'``: ` ` `  `    ``n ``=` `3` `    ``k ``=` `2` `    ``wt ``=` `[``2``, ``4``, ``3``] ` ` `  `    ``# Making adjacency list, storing  ` `    ``# the nodes along with their weight.  ` `    ``adj ``=` `[[] ``for` `i ``in` `range``(n ``+` `1``)] ` ` `  `    ``adj[``0``].append([wt[``2``], ``2``])  ` `    ``adj[``2``].append([wt[``0``], ``0``])  ` ` `  `    ``adj[``0``].append([wt[``1``], ``1``])  ` `    ``adj[``1``].append([wt[``0``], ``0``])  ` ` `  `    ``adj[``1``].append([wt[``2``], ``2``])  ` `    ``adj[``2``].append([wt[``1``], ``1``])  ` ` `  `    ``printkthnode(adj, wt, n, k) ` ` `  `# This code is contributed by PranchalK `

Output:

```2 0 0
```

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

This article is attributed to GeeksforGeeks.org

## tags:

Graph Order-Statistics Graph

code

load comments