Quantcast
Channel: CodeChef Discuss - latest questions
Viewing all articles
Browse latest Browse all 40121

TREE - Editorial

$
0
0

PROBLEM LINKS

Practice
Contest

DIFFICULTY

EASY

PREREQUISITES

Kirchhoff's Matrix Tree Theorem, Math

PROBLEM

Find the number of Trees that contain k*n nodes, which are labeled from 0 to k*n-1, such that

  • There is no edge between two vertices a and b for which a div k = b div k, where div is the integerdivision operator

QUICK EXPLANATION

Let us assume there is a graph on k*n vertices such that for any two vertices a and b, if adivk is not equal to bdivk, there is an edge between them. On such a graph, every unique spanningtree is a valid tree according to the definition of the problem statement.

Since there are only 3 possible different values of k, let us consider them one by one.

k = 1

The Kirchhoff'sMatrix for a graph with n vertices will look like

n-1  -1  -1 ...  -1
 -1 n-1  -1 ...  -1
 -1  -1 n-1 ...  -1
...
 -1  -1  -1 ... n-1

We have to find the the determinant of any cofactor of the above matrix to find the number of spanning trees. Let us consider the (n,n)cofactor.

n-1  -1  -1 ...  -1
 -1 n-1  -1 ...  -1
 -1  -1 n-1 ...  -1
...
 -1  -1  -1 ... n-1

The (n,n)cofactor consists of n-1 rows and n-1 columns.

The determinant of the above matrix will give us the answer for k = 1. Let us perform some operations that do not affect the determinant and make the matrix triangular. This way the determinant is found as the product of the terms in the major diagonal.

Starting from the top row and proceeding downwards, let us subtract the next row from the current row. Thus

  • Subtract row 2 from row 1
  • Subtract row 3 from row 2, and so on
 n -n  0 ...  0   0
 0  n -n ...  0   0
 0  0  n ...  0   0
....
 0  0  0 ...  n  -n 
-1 -1 -1 ... -1 n-1
  • We can use the rows 1 to n-2 to eliminate the first -1 in row n-1
  • We can use the rows 2 to n-2 to eliminate the second -1 in row n-1, and so on

Eventually we get

 n -n  0 ... 0  0
 0  n -n ... 0  0 
...
 0  0  0 ... n -n
 0  0  0 ... 0  1

Thus, the answer for k = 1 is nn-2.

The analysis for k = 2 and k = 3 are much more involved.

EXPLANATION

k = 2

(2n,2n)cofactor of the Kirchhoff's Matrix for a graph with 2*n nodes will look like

 2n-2   0   -1   -1  ...  -1   -1   -1
   0  2n-2  -1   -1  ...  -1   -1   -1
  -1   -1  2n-2   0  ...  -1   -1   -1
  -1   -1    0  2n-2 ...  -1   -1   -1
...
  -1   -1   -1   -1  ... 2n-2   0   -1
  -1   -1   -1   -1  ...   0  2n-2  -1
  -1   -1   -1   -1  ...  -1   -1  2n-2

It contains 2n-1 rows and 2n-1 columns. Similar to how we subtracted the next row from the current one for k = 1, we will subtract the next row from the current one, starting from the top row and working downwards.

 2n-2 -(2n-2)     0       0   ...   0      0       0
   1    2n-1  -(2n-1)    -1   ...   0      0       0
   0      0     2n-2  -(2n-2) ...   0      0       0
   0      0       1     2n-1  ...   0      0       0
...
   0      0       0       0   ... 2n-2 -(2n-2)     0
   0      0       0       0   ...   1    2n-1  -(2n-1)
  -1     -1      -1      -1   ...  -1     -1     2n-2

We can use the first row to eliminate terms on the left of the major diagonal in the second row. Similarly, we can use the third row to eliminate terms on the left of the major diagonal in the fourth row, and so on.

 2n-2 -(2n-2)     0       0   ...   0      0       0
   0     2n   -(2n-1)    -1   ...   0      0       0
   0      0     2n-2  -(2n-2) ...   0      0       0
   0      0       0      2n   ...   0      0       0
...
   0      0       0       0   ... 2n-2 -(2n-2)     0
   0      0       0       0   ...   0     2n   -(2n-1)
  -1     -1      -1      -1   ...  -1     -1     2n-2

We can use row 3 on row 2, row 5 on row 4 and so on to convert the matrix into

 2n-2 -(2n-2)     0       0   ...   0      0       0
   0     2n       0     -2n   ...   0      0       0
   0      0     2n-2  -(2n-2) ...   0      0       0
   0      0       0      2n   ...   0      0       0
...
   0      0       0       0   ... 2n-2 -(2n-2)     0
   0      0       0       0   ...   0     2n   -(2n-1)
  -1     -1      -1      -1   ...  -1     -1     2n-2

Now we can convert the final row using all the previous rows into

 2n-2 -(2n-2)     0       0   ...   0      0       0
   0     2n       0     -2n   ...   0      0       0
   0      0     2n-2  -(2n-2) ...   0      0       0
   0      0       0      2n   ...   0      0       0
...
   0      0       0       0   ... 2n-2 -(2n-2)     0
   0      0       0       0   ...   0     2n   -(2n-1)
   0      0       0       0   ...   0  -(2n-2)   2n-2

The last row can reduce the second to last row into

 2n-2 -(2n-2)     0       0   ...   0      0       0
   0     2n       0     -2n   ...   0      0       0
   0      0     2n-2  -(2n-2) ...   0      0       0
   0      0       0      2n   ...   0      0       0
...
   0      0       0       0   ... 2n-2 -(2n-2)     0
   0      0       0       0   ...   0      1       0
   0      0       0       0   ...   0  -(2n-2)   2n-2

Of course the matrix is triangular now and the determinant is simply the product of the terms in the major diagonal. There are n occurances of 2n-2 and n-2 occurances of 2n in the major diagonal.

Thus, the answer for k=2 is (2n)n-2(2n-2)n.

We leave k = 3 as an exercise to the reader. As a matter of fact, this month's tester David proved during the testing of this problem that there is a closed form for any k that can be calculated using the same ideas presented above for k = 1 and k = 2. The result for any k is

(k*n)n-2(k*(n-1))(k-1)*n

The limits were intentionally kept lowenough to not let the existance of closed form solution be apparent.

SETTER'S SOLUTION

Can be found here.

TESTER'S SOLUTION

Can be found here.


Viewing all articles
Browse latest Browse all 40121

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>