AverageVarianceSubtree
SRM 712 · 2017-02-20 · by cgy4ever
Problem Statement
- Let mu = (x_1 + ... + x_n) / n be the mean of the collection.
- Let y_i = (x_i - mu)^2 be the square of the difference between x_i and the mean.
- The variance of X, denoted var(X), can now be computed as the average of all y_i. (In other words, as the sum of all y_i, divided by n.)
Another example: suppose X = { 0, 0, 0, 1 }. Now we have mu = 1/4. Then we compute that y_1 = y_2 = y_3 = 1/16 and y_4 = 9/16. The average of these four values is 3/16.
You are given a tree T with n vertices, labeled 0 through n-1. More precisely, you are given the
Each vertex of the tree has a positive integer weight. You are given these weights in the
A subtree of the tree T is any subgraph that is a tree. Alice found all nonempty subtrees of T. For each of them, she took the collection of weights of its vertices and she computed its variance. Bob then computed the average of all the variances computed by Alice. Compute and return the number Bob computed.
Notes
- The returned value must have an absolute or relative error less than 1e-9.
Constraints
- weight will contain between 1 and 50 elements, inclusive.
- Each element in weight will be between 1 and 1,000,000,000, inclusive.
- p will contain exactly |weight|-1 elements.
- For each i, 0 <= p[i] <= i.
{0,1}
{10,20,30}
Returns: 19.444444444444443
The tree contains the edges 1-0 and 2-1. Thus, it looks as follows: 0-1-2. This tree has six different subtrees. These correspond to the following collections of weights: {10}, {20}, {30}, {10,20}, {20,30}, and {10,20,30}. Their variances are 0, 0, 0, 25, 25, and 200/3. The return value is the average of these six numbers.
{0,1,1}
{10,20,7,6}
Returns: 23.0145202020202
This time the tree looks as shown below. (The numbers in the figure are the weights of those vertices.) 10 - 20 - 7 | 6 This tree has 11 nonempty subtrees. Below we list the collection of weights and its variance for each of the subtrees. {10}, 0.0000000000000000 {20}, 0.0000000000000000 {7}, 0.0000000000000000 {6}, 0.0000000000000000 {10,20}, 25.0000000000000000 {7,20}, 42.2500000000000000 {6,20}, 49.0000000000000000 {20,7,6}, 40.6666666666666643 {10,20,6}, 34.6666666666666643 {10,20,7}, 30.8888888888888857 {10,20,7,6}, 30.6875000000000000
{0}
{1,1000000000}
Returns: 8.3333333166666672E16
The answer can be very large
{0,0,1,0,2,3,3,6}
{1,11,111,1111,11111,111111,1111111,11111111,111111111}
Returns: 4.432586365551198E14
{}
{712}
Returns: 0.0
Submissions are judged against all 82 archived test cases, of which 5 are shown here. Case numbers match the judge’s.
Language: C++17 · define a public class AverageVarianceSubtree with a public method double average(vector<int> p, vector<int> weight) · 82 test cases · 2 s / 256 MB per case