题目
Mivik
喜欢 Eprom
的解构俱乐部,于是他想解构一棵树。
Mivik
找到了一棵以
1
1
1 为根的有
n
n
n 个结点的有根外向树。Mivik
会进行
(
n
−
1
)
(n − 1)
(n−1) 次操作,每次 Mivik
都会从未删掉的边中等概率选择一条边将其删去。记这条边为
a
→
b
a → b
a→b,则删去这条边的代价是删边时
b
b
b 的子树大小(包括
b
b
b 自己);删去这条边后
b
b
b 为根的子树会形成一棵新的以
b
b
b 为根的有根树。
例如,下图是 Mivik
找到的有根树:
如果 Mivik
选了
1
→
2
1 \to 2
1→2 这条边并将其删去,那么代价是
3
3
3(
2
2
2 所在的子树内共有
2
,
4
,
5
2,4,5
2,4,5 三个结点),而后情况会变成这样:
如果 Mivik
此时再删去
2
→
4
2 \to 4
2→4 这条边,那么代价是
1
1
1(
4
4
4 所在的子树内只有
4
4
4 一个结点),
随后情况会变成这样:
Mivik
想知道,他进行这
(
n
−
1
)
(n − 1)
(n−1) 次操作后期望的代价总和是多少。由于 Mivik
不喜欢太大的数,你只需要输出期望的值对
1
0
9
+
7
10^9 + 7
109+7 取模的结果。
数据范围
对于所有测试点,满足
1
≤
n
≤
2
×
1
0
6
1 \leq n \leq 2 \times 10^6
1≤n≤2×106。保证给出的有根树合法。
每个子任务的具体限制见下表:
子任务编号 | 分值 | 特殊限制 |
---|---|---|
1 1 1 | 10 10 10 | a i = 1 a_i=1 ai=1 |
2 2 2 | 15 15 15 | a i = i a_i=i ai=i |
3 3 3 | 25 25 25 | n ≤ 500 n \leq 500 n≤500 |
4 4 4 | 50 50 50 | 无 |
题解
想到对于从
1
1
1 到
i
i
i 的一条链上的答案是互不影响的,所以我们对于一个点
i
i
i 考虑其对答案的贡献。
显然, 设
S
i
=
a
1
,
a
2
…
,
a
i
S_i=a_1,a_2 \dots,a_i
Si=a1,a2…,ai 为边的数量为
i
i
i 的 删边顺序的排列(这里的
a
i
a_i
ai是按照从根到
i
i
i 的边的顺序来排的,即
a
i
=
k
a_i=k
ai=k,
k
k
k为第
k
k
k条边)。我们只要统计其中的有效删边(会把
i
i
i计算进去的删边)的边数即为答案。
显然,如果
a
i
>
a
j
,
i
<
j
,
a_i>a_j,i<j,
ai>aj,i<j,那么
i
i
i 就不会被计算到。于是
S
S
S 的答案即为排列中单调栈的大小。
然后我们考虑怎么求其单调栈的大小:
对于一个数
x
x
x,显然,只有
1
∣
S
∣
−
x
+
1
\frac{1}{|S|-x+1}
∣S∣−x+11的概率会在
x
x
x 的前面选到比x大的数,所以对于
S
i
S_i
Si的所有排列的答案即为
∣
S
∣
!
×
∑
i
=
1
∣
S
∣
1
i
|S|! \times \sum_{i=1}^{|S|} \frac{1}{i}
∣S∣!×∑i=1∣S∣i1。
所以对于所有的点
i
i
i ,其删边排列大小为
d
e
p
i
dep_i
depi,(
d
e
p
i
dep_i
depi为
i
i
i 的深度,
d
e
p
1
=
0
dep_1=0
dep1=0(想一想为什么))。
于是答案就是
∑
i
=
2
n
∑
j
=
1
d
e
p
i
1
j
\sum_{i=2}^{n}\sum_{j=1}^{dep_i} \frac{1}{j}
∑i=2n∑j=1depij1。