题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1382

题解:简单的树形dp加上组合数学。

#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#define mod 1000000007
using namespace std;
typedef long long ll;
const int M = ;
ll dp[M] , C[M][M];
int fa[M] , num[M];
vector<int> vc[M];
void find_num(int u , int pre) {
num[u] = ;
int len = vc[u].size();
for(int i = ; i < len ; i++) {
int v = vc[u][i];
if(v == pre) continue;
find_num(v , u);
num[u] += num[v];
}
}
void dfs(int u , int pre) {
int len = vc[u].size();
ll ans = , sum = num[u];
for(int i = ; i < len ; i++) {
int v = vc[u][i];
if(v == pre) continue;
dfs(v , u);
ans *= (C[sum - ][num[v]] * dp[v]) % mod;
ans %= mod;
sum -= num[v];
}
dp[u] = ans;
dp[u] %= mod;
}
int main() {
int t , n;
int Case = ;
scanf("%d" , &t);
C[][] = ;
for(int i = ; i <= M - ; i++) {
C[i][] = ;
for(int j = ; j <= i ; j++)
C[i][j] = (C[i - ][j - ] + C[i - ][j]) % mod;
}
while(t--) {
scanf("%d" , &n);
for(int i = ; i <= n ; i++) {
vc[i].clear();
dp[i] = ;
fa[i] = -;
num[i] = ;
}
for(int i = ; i < n - ; i++) {
int u , v;
scanf("%d%d" , &u , &v);
vc[u].push_back(v);
fa[v] = u;
}
int root = ;
for(int i = ; i <= n ; i++) {
if(fa[i] == -) {
root = i;
break;
}
}
find_num(root , -);
dfs(root , -);
printf("Case %d: %lld\n" , ++Case , dp[root] % mod);
}
return ;
}

最新文章

  1. 如何让Maple中的数学引擎进入你的桌面应用程序和网站
  2. Android 适配2
  3. 【小贴士】虚拟键盘与fixed带给移动端的痛!
  4. C语言的执行
  5. 转:不再以讹传讹,GET和POST的真正区别
  6. webStorm快捷键总结
  7. HTML 5的革新:结构之美
  8. 线程池原理及创建并C++实现
  9. JAVA Web 之 struts2文件上传下载演示(一)(转)
  10. 配置servers时,错误:Setting property &#39;source&#39; to &#39;org.eclipse.jst.jee.server:hczm&#39; did not find a matching property
  11. C#在声明对象时对其赋值的一种方式
  12. java进程卡死问题
  13. LeetCode_Regular Expression Matching
  14. 法方总经理用的笔记本电脑&amp;一体机拆开图。
  15. 下载centos6.4
  16. nefu 1029 字符串
  17. Xshell学习--菜鸟篇
  18. Python scrapy爬虫学习笔记01
  19. react-navigation实现页面框架(转载)
  20. windows平台mysql密码设置

热门文章

  1. 【iOS】沙盒目录
  2. Android Studio 设置/更改 SDK 路径
  3. Where is the clone one and how to extract it?
  4. Java 获取操作系统相关的内容
  5. git的使用(一)
  6. 使用Arthas 获取Spring ApplicationContext还原问题现场
  7. Spring Boot 整合 JPA 使用多个数据源
  8. .netcore持续集成测试篇之开篇简介及Xunit基本使用
  9. java多线程基础(二)--java线程各状态关系
  10. 使用idea在linux上启动springboot项目