HihoCoder1470 : 公平的游戏

描述

有一些人在玩一个游戏。游戏的舞台发生在一个 n 个点的树上。

这个游戏分为很多轮,每一轮都有一些玩家参与,每个玩家都会降落在一条给定的边上(不同玩家的边不同)。之后这 n 个点上都会随机出现一个0或者1作为权值。

我们说这一轮游戏是公平的,当且仅当这一轮中,对于每个玩家,如果将她所在的边删除,那么两边对应的两个子树的点权和是相等的。

对于每一轮,我们给出每个玩家的位置,你需要计算出该轮游戏是公平的概率 p。为了保证输出是整数,你只需要输出 p × 2n % (109+7) 就可以了。

输入

树的点从1开始标号。

第一行两个数 n 和 m 分别表示树的点数和游戏的轮数。

接下来 n-1行每行两个数 a 和 b 表示一条边。

接下来 m 行每行表示一轮游戏。

其中的第 i 行由一个数字 ti 开头,表示这轮游戏有 ti 个玩家,

接下来 ti 个数对,其中第 j 个数对 ai,j 和 bi,j 表示第 j 个玩家所在的边的两个端点。

n, m ≤ 100000

所有 ti 的和 ≤ 1000000

输出

输出 m 行,每行一个数表示答案。

样例输入

5 5
1 2
1 3
3 4
3 5
4 1 2 1 3 3 4 3 5
1 3 4
2 3 4 1 2
1 3 5
2 3 4 3 5

样例输出

1
5
2
5
2

和组合数有关。

原文地址:https://www.cnblogs.com/hua-dong/p/8453871.html