TopcoderARCHIVE
Archive/Problems/SubtreesCounting
SRM · Problem 14179

SubtreesCounting

Problem statement, definition, constraints, and public examples.

Problem Statement

You are given an undirected tree T. (The input format is specified below.) The vertices of the tree are numbered 0 through n-1.

A subtree of T is any subgraph of T that is connected. The size of a subtree is the number of vertices it contains. Two subtrees are considered different if one of them contains a vertex the other doesn't.

Let X be the sum of sizes of all subtrees of T. As X can be large, compute and return the value (X modulo 1,000,000,007).

You are given the int n: the size of tree T. You are also given parameters for a pseudorandom generator: ints a0, b, c, and m. Use the pseudocode given below to generate the tree T. Watch out for integer overflow.

a[0] = a0
for i = 1 .. n-2:
    a[i] = (b * a[i-1] + c) mod m

for i = 1 .. n-1:
    j = a[i-1] mod i
    add an edge between vertices i and j

Definition

Class:
SubtreesCounting
Method:
sumOfSizes
Parameters:
int, int, int, int, int
Returns:
int
Method signature:
int sumOfSizes(int n, int a0, int b, int c, int m)
(be sure your method is public)

Constraints

  • n will be between 1 and 10^5, inclusive.
  • a0, b and c will be between 0 and 10^9, inclusive.
  • m will be between 1 and 10^9, inclusive.

Examples

  1. 3
    1
    1
    1
    1
    Returns: 10
    Tree T has 3 vertices and contains the edges 0-1 and 0-2. This tree has six different subtrees. These correspond to the following sets of vertices: {0}, {1}, {2}, {0,1}, {0,2}, and {0,1,2}. The sizes of these subtrees are 1, 1, 1, 2, 2, and 3. Thus, the correct answer is 1+1+1+2+2+3 = 10.
  2. 5
    1
    2
    3
    100
    Returns: 52
    Tree T contains the edges 0-1, 1-2, 1-3, 1-4.
  3. 1
    1
    1
    1
    1
    Returns: 1
    Just one vertex in T.
  4. 2
    5
    6
    7
    8
    Returns: 4
    Tree T has 2 vertices and contains the only edge 0-1.
  5. 100000
    123
    46645
    4564579
    1000000000
    Returns: 769840633
    Watch out for integer overflow. First 10 elements (a[0], a[1], ..., a[9]) of the generated sequence are: 123, 10301914, 537343109, 373883884, 818333759, 182753134, 524500009, 307484384, 613656259, 765634.
← All problems