- Trending Categories
- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP

- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who

Suppose, we have a tree with n vertices, where each vertex is labeled from 1 to n. The root of the tree has the label 1, and each vertex weights wi. Now a nxn matrix A is formed where A(x,y) = Wf(x, y) where f(x, y) is the least common predecessor of vertex x and y. We have to find out the determinant of matrix A. The edges of the matrix, weights, and the total number of vertices are given to us as input.

So, if the input is like input_array = [[1, 2], [1, 3], [1, 4], [1, 5]], weights = [1, 2, 3, 4, 5], vertices = 5, then the output will be 24.

The matrix A is given as =

1 | 1 | 1 | 1 | 1 |

1 | 2 | 1 | 1 | 1 |

1 | 1 | 3 | 1 | 1 |

1 | 1 | 1 | 4 | 1 |

1 | 1 | 1 | 1 | 5 |

the determinant of this matrix is 24.

To solve this, we will follow these steps −

- w := an empty list
- for i in range 0 to vertices, do
- add weights[i] and a new list to w

- for each i, item in enumerate(input_array), do
- p := item[0]
- q := item[1]
- insert q - 1 at the end of w[p - 1, 1]
- insert p - 1 at the end of w[q - 1, 1]

- det := 1
- stack := a stack containing a tuple (0, 0)
- while stack is not empty, do
- i, weights := delete top element from stack
- det := (det * (w[i, 0] - weights)) mod (10^9 + 7)
- for t in w[i][1], do
- add tuple containing (t,w[i,0]) to the stack
- for each t in w[i][1], do
- delete i from w[t,1]

- return det

Let us see the following implementation to get better understanding −

def solve(input_array, weights, vertices): w = [[weights[i],[]] for i in range(vertices)] for i, item in enumerate(input_array): p,q = item[0], item[1] w[p - 1][1].append(q - 1) w[q - 1][1].append(p - 1) det = 1 stack = [(0,0)] while stack: i, weights = stack.pop() det = (det * (w[i][0] - weights)) % (10**9 + 7) stack += [(t,w[i][0]) for t in w[i][1]] for t in w[i][1]: w[t][1].remove(i) return det print(solve([[1, 2], [1, 3], [1, 4], [1, 5]], [1, 2, 3, 4, 5], 5))

[[1, 2], [1, 3], [1, 4], [1, 5]], [1, 2, 3, 4, 5], 5

24

- Related Questions & Answers
- C++ Program to Compute Determinant of a Matrix
- Determinant of a Matrix in C++ Program
- Program to Find Out the Special Nodes in a Tree in Python
- Program to find the transpose of given matrix in Python
- Determinant of a Matrix in C++?
- Program to find number of special positions in a binary matrix using Python
- Python Program to find out the number of sets greater than a given value
- Program to Find Out the Occurrence of a Digit from a Given Range in Python
- Python Program to find the transpose of a matrix
- Program to find out the lowest common ancestor of a binary tree of given nodes using Python
- Find the transpose of a matrix in Python Program
- How can SciPy be used to calculate the determinant value of a matrix in Python?
- Program to find area of largest square of 1s in a given matrix in python
- Program to find number of distinct island shapes from a given matrix in Python
- Program to find nth smallest number from a given matrix in Python

Advertisements