Program to find sum of the costs of all simple undirected graphs with n nodes in Python

PythonServer Side ProgrammingProgramming

Suppose we have an undirected graph G with n nodes. Now consider the cost of a simple undirected graph is the sum of the costs of its nodes. And The cost of a node is D^k, where D is its degree. Now we have n and k values. We have to find the sum of the costs of all possible simple undirected graphs with n nodes. The result may be very large, so return the result modulo 1005060097.

So, if the input is like n = 3 k = 2, then the output will be 36 because, there are eight simple graphs with 3 nodes.

  • One graph with only 3 edges, and its cost is 2^2+2^2+2^2 = 12.
  • There graphs with two edges, and the cost of each is 1^2+1^2+2^2 = 6.
  • Three graphs with one edge, and the cost of each is 0^2+1^2+1^2 = 2.
  • One graph with no edges, and its cost is 0^2+0^2+0^2 = 0.

So, the total is 12*1 + 6*3 + 2*3 + 0*1 = 36.

To solve this, we will follow these steps −

  • Define a function choose() . This will take n, k
  • product := 1
  • for i in range n to n-k, decrease by 1, do
    • product := product * i
  • for i in range 1 to k, do
    • product := product / i
  • return product as integer
  • Define a function util() . This will take d, n
  • return choose(n-1, d) * 2 ^(choose(n-1, 2))
  • From the main method, do the following:
  • total := 0
  • for d in range 0 to n - 1, do
    • total := total + util(d, n) * d^k
    • total := total mod 1005060097
  • return (total * n) mod 1005060097

Example

Let us see the following implementation to get better understanding −

def choose(n, k):
   product = 1
   for i in range(n, n-k, -1):
      product *= i
   for i in range(1, k+1):
      product /= i
   return int(product)

def util(d, n):
   return choose(n-1, d) * 2 ** (choose(n-1, 2))

def solve(n, k):
   total = 0
   for d in range(n):
      total += util(d, n) * d ** k
      total %= 1005060097
   return (total * n) % 1005060097

n = 3
k = 2
print(solve(n, k))

Input

3, 2

Output

36
raja
Updated on 25-Oct-2021 06:59:57

Advertisements