#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=20005;
struct node
{
int x,y;
int v,next;
}edge[maxn];
int head[maxn],cnt,n;
int sz[maxn];
double an;
int add(int x,int y,int v)
{
edge[cnt].x=x;
edge[cnt].y=y;
edge[cnt].v=v;
edge[cnt].next=head[x];
head[x]=cnt++;
}
int dfs(int root,int fa)
{
sz[root]=1;
for(int i=head[root];i!=-1;i=edge[i].next)
{
int a=edge[i].y;
int b=edge[i].v;
if(a==fa) continue;
dfs(a,root);
sz[root]=sz[root]+sz[a];
an=an+(double)(n-sz[a])*sz[a]*b;
}
}
int main()
{
int t; scanf("%d",&t);
while(t--)
{
memset(head,-1,sizeof(head));
memset(sz,0,sizeof(sz));
cnt=0;
scanf("%d",&n);
for(int i=0;i<n-1;i++)
{
int x,y,z; scanf("%d%d%d",&x,&y,&z);
add(x,y,z); add(y,x,z);
}
an=0.0;
dfs(0,-1);
printf("%.7f\n",an/ (1.0 * n * (n - 1) / 2.0));
}
}
Average distance
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 943 Accepted Submission(s): 318
Special Judge
Problem Description
Given a tree, calculate the average distance between two vertices in the tree. For example, the average distance between two vertices in the following tree is (d
01 + d
02 + d
03 + d
04 + d
12 +d
13 +d
14 +d
23 +d
24 +d
34)/10 = (6+3+7+9+9+13+15+10+12+2)/10 = 8.6.

Input
On the first line an integer t (1 <= t <= 100): the number of test cases. Then for each test case:
One line with an integer n (2 <= n <= 10 000): the number of nodes in the tree. The nodes are numbered from 0 to n - 1.
n - 1 lines, each with three integers a (0 <= a < n), b (0 <= b < n) and d (1 <= d <= 1 000). There is an edge between the nodes with numbers a and b of length d. The resulting graph will be a tree.
One line with an integer n (2 <= n <= 10 000): the number of nodes in the tree. The nodes are numbered from 0 to n - 1.
n - 1 lines, each with three integers a (0 <= a < n), b (0 <= b < n) and d (1 <= d <= 1 000). There is an edge between the nodes with numbers a and b of length d. The resulting graph will be a tree.
Output
For each testcase:
One line with the average distance between two vertices. This value should have either an absolute or a relative error of at most 10 -6
One line with the average distance between two vertices. This value should have either an absolute or a relative error of at most 10 -6
Sample Input
1 5 0 1 6 0 2 3 0 3 7 3 4 2
Sample Output
8.6
Source
Recommend