牛牛的两颗树
题号:NC21611
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 32 M,其他语言64 M
Special Judge, 64bit IO Format: %lld

题目描述

牛牛有两颗树,都是n个点,标号都为0到n-1,现在随机产生一个0到n-1的排列p[],让第一棵树的第i个点与第二棵树的第p[i] 个点连边,现在牛牛想知道两棵树连通后,长度为K的简单环的期望,输出答案误差不超过1e-9

输入描述:

第一行输入了两个整数n,K (2 ≤ n ≤ 300, 3 ≤ K ≤ 7)

第二行输入n-1个数x[i]表示x[i]与i+1之间有一条边 (0 ≤ x[i] ≤ i) (第一棵树)

第三行输入n-1个数y[i]表示y[i]与i+1之间有一条边 (0 ≤ y[i] ≤ i) (第二棵树)

输出描述:

输出简单环的期望个数
示例1

输入

复制
2 4
0
0

输出

复制
1.0

说明

2e3y3k3.jpg
示例2

输入

复制
3 4
0 1
0 1

输出

复制
1.3333333333333333

说明

ICtMmwFnB9QAAAABJRU5ErkJggg==

备注:

子任务一30分:n<=10

子任务二30分:n<=50

子任务三40分:n<=300