Maximum Total Importance of Roads

Updated on 10 June, 2025
Maximum Total Importance of Roads header image

Problem Statement

In the given problem, you are provided with an integer n which represents the total number of cities in a country. These cities are indexed from 0 to n-1. To interconnect these cities, a list of bidirectional roads is also given in the form of a 2D array roads, where each sub-array roads[i] = [ai, bi] indicates a road linking city ai with city bi.

You are required to assign a unique integer value, from 1 to n, to each city. The objective is to allocate these values in such a way that the total importance of all roads is maximized. The importance of an individual road is defined as the sum of the values assigned to the two cities it connects. The task is to output the maximum possible total importance of all roads once the values are assigned optimally.

Examples

Example 1

Input:

n = 5, roads = [[0,1],[1,2],[2,3],[0,2],[1,3],[2,4]]

Output:

43

Explanation:

The figure above shows the country and the assigned values of [2,4,5,3,1].
- The road (0,1) has an importance of 2 + 4 = 6.
- The road (1,2) has an importance of 4 + 5 = 9.
- The road (2,3) has an importance of 5 + 3 = 8.
- The road (0,2) has an importance of 2 + 5 = 7.
- The road (1,3) has an importance of 4 + 3 = 7.
- The road (2,4) has an importance of 5 + 1 = 6.
The total importance of all roads is 6 + 9 + 8 + 7 + 7 + 6 = 43.
It can be shown that we cannot obtain a greater total importance than 43.

Example 2

Input:

n = 5, roads = [[0,3],[2,4],[1,3]]

Output:

20

Explanation:

The figure above shows the country and the assigned values of [4,3,2,5,1].
- The road (0,3) has an importance of 4 + 5 = 9.
- The road (2,4) has an importance of 2 + 1 = 3.
- The road (1,3) has an importance of 3 + 5 = 8.
The total importance of all roads is 9 + 3 + 8 = 20.
It can be shown that we cannot obtain a greater total importance than 20.

Constraints

  • 2 <= n <= 5 * 104
  • 1 <= roads.length <= 5 * 104
  • roads[i].length == 2
  • 0 <= ai, bi <= n - 1
  • ai != bi
  • There are no duplicate roads.

Approach and Intuition

To solve this problem, the approach revolves around understanding the relationship between the roads and the city connections:

  1. Degree Calculation:

    • First, calculate the degree (number of connections) of each city. Cities with higher degrees are connected to more roads and thus will contribute to road importance more frequently.
  2. Value Assignment:

    • Assign higher values to cities with higher degrees. This is because the value of a city gets summed up in the total importance every time it appears in a connection.
    • Sort the cities based on their degrees. Assign the value n to the city with the highest degree, n-1 to the second highest, and so forth down to 1.
  3. Maximizing Importance:

    • Once cities are assigned their respective values, compute the importance of each road using the formula for importance where the sum of values of cities connected by a particular road is calculated.
  4. Summation and Result:

    • Sum up the importance of all roads to get the total importance.

This methodology ensures that cities which influence the total importance more (due to their larger number of connections) are assigned higher numeric values, thereby contributing positively towards achieving the maximal road importance. This strategy leverages the connectivity of the cities to optimize the road values and inherently the total importance.

Solutions

  • C++
  • Java
  • Python
cpp
class Solution {
public:
    long long maxImportance(int N, vector<vector<int>>& Routes) {
        vector<long long> degrees(N, 0);

        for (auto& route : Routes) {
            degrees[route[0]]++;
            degrees[route[1]]++;
        }

        sort(degrees.begin(), degrees.end());

        long long importance = 1;
        long long finalImportance = 0;
        for (auto& degree : degrees) {
            finalImportance += degree * importance;
            importance++;
        }

        return finalImportance;
    }
};

To solve the problem of maximizing the total importance of roads, the given C++ solution employs a straightforward method involving sorting and calculating weighted sums based on node degrees. Here's how the code works:

  1. Initialize a vector degrees of size N to keep a count of connections (roads) each city (node) has. Initialize all values to zero, ensuring each city starts with no connections.

  2. Iterate over the Routes, which contains pairs of cities connected by roads. For each pair, increment the degree of both cities involved in the route. This loop effectively counts how many roads each city is connected to.

  3. Sort the degrees vector in ascending order. Sorting allows for assigning the highest importance to cities with the most roads, maximizing the total importance.

  4. Initialize two variables, importance starting at 1 and finalImportance starting at 0. importance represents the importance value that will be assigned to each city, incrementing by 1 after each assignment.

  5. Loop through the sorted degrees array. For each degree (i.e., each city's number of connections), calculate the contribution to the total importance by multiplying the degree by its corresponding importance. Accumulate these values in finalImportance.

  6. The loop's end result in finalImportance is the maximum total importance based on the given connectivity of the cities.

By sorting the cities by their connections and weighting them accordingly, this approach ensures that the assignment of importance values is optimal for achieving the maximum total importance. Return finalImportance as the solution.

java
class Solution {

    public long maxImportance(int cityCount, int[][] connections) {
        long[] connectionsCount = new long[cityCount];

        for (int[] road : connections) {
            connectionsCount[road[0]]++;
            connectionsCount[road[1]]++;
        }

        Arrays.sort(connectionsCount);

        long importanceValue = 1;
        long importanceSum = 0;
        for (long count : connectionsCount) {
            importanceSum += (importanceValue * count);
            importanceValue++;
        }

        return importanceSum;
    }
}

This Java solution addresses the problem of calculating the maximum total importance of roads based on a given number of cities and their connections. Here's how the solution is structured:

  • Initialize a connectionsCount array to store the number of roads connected to each city.
  • Increment the road count for both cities involved in each connection within the connections array.
  • Sort the connectionsCount array to facilitate the calculation of maximum importance.
  • Initialize variables importanceValue starting from 1, and importanceSum to accumulate the total importance.
  • Iterate through each count in the sorted connectionsCount:
    • Multiply the current importanceValue by the count of connections for the city.
    • Add the result to importanceSum.
    • Increment importanceValue for the next city.
  • Return the accumulated importanceSum as the result.

This method ensures each city's importance is weighed according to the number of connections, prioritizing cities with fewer roads by multiplying them with lower importance values. This is why sorting is crucial as it aligns lesser connected cities with lower importance values to maximize the overall importance sum.

python
class Solution:
    def computeMaxImportance(self, number_nodes: int, connect_list: List[List[int]]) -> int:
        node_degrees = [0] * number_nodes

        for connection in connect_list:
            node_degrees[connection[0]] += 1
            node_degrees[connection[1]] += 1

        node_degrees.sort()

        importance_value = 1
        final_importance = 0
        for degree in node_degrees:
            final_importance += importance_value * degree
            importance_value += 1

        return final_importance

The Python program provided is designed to compute the maximum total importance of roads in a graph, where the graph is represented by nodes connected by edges. The function computeMaxImportance accepts two parameters: number_nodes, which is the number of nodes in the graph, and connect_list, a list of lists representing pairs of connected nodes.

Here's a summary of how the code accomplishes this task:

  • Initialize Node Degrees: A list called node_degrees is initialized to zero for each node. This list will keep track of how many connections (or edges) each node has.

  • Tabulating Each Connection: The program iterates through each connection in connect_list, incrementing the degree in node_degrees for the nodes involved in each connection.

  • Sorting Node Degrees: The node_degrees list is sorted in ascending order to prepare for importance calculation.

  • Calculating Importance: The program initializes variables importance_value and final_importance. It then iterates through the sorted node_degrees, calculating the final importance by multiplying each degree by an increasing importance_value and summing up these products to final_importance.

  • Return Result: Finally, the function returns final_importance, which represents the maximum total importance of the roads based on the node connection degrees.

The result is a straightforward yet efficient way of determining the total importance based on the degree of connections each node has, exploiting the principle that more connected nodes contribute more significantly to the network's overall importance.

Comments

No comments yet.