题目链接: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 = 1234;
ll dp[M] , C[M][M];
int fa[M] , num[M];
vector<int> vc[M];
void find_num(int u , int pre) {num[u] = 1;int len = vc[u].size();for(int i = 0 ; 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 = 1 , sum = num[u];for(int i = 0 ; i < len ; i++) {int v = vc[u][i];if(v == pre) continue;dfs(v , u);ans *= (C[sum - 1][num[v]] * dp[v]) % mod;ans %= mod;sum -= num[v];}dp[u] = ans;dp[u] %= mod;
}
int main() {int t , n;int Case = 0;scanf("%d" , &t);C[0][0] = 1;for(int i = 1 ; i <= M - 1 ; i++) {C[i][0] = 1;for(int j = 1 ; j <= i ; j++)C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % mod;}while(t--) {scanf("%d" , &n);for(int i = 1 ; i <= n ; i++) {vc[i].clear();dp[i] = 1;fa[i] = -1;num[i] = 0;}for(int i = 0 ; i < n - 1 ; i++) {int u , v;scanf("%d%d" , &u , &v);vc[u].push_back(v);fa[v] = u;}int root = 1;for(int i = 1 ; i <= n ; i++) {if(fa[i] == -1) {root = i;break;}}find_num(root , -1);dfs(root , -1);printf("Case %d: %lld\n" , ++Case , dp[root] % mod);}return 0;
}

转载于:https://www.cnblogs.com/TnT2333333/p/7656124.html

lightoj 1382 - The Queue(树形dp)相关推荐

  1. BNUOJ 52305 Around the World 树形dp

    题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...

  2. fwt优化+树形DP HDU 5909

    1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...

  3. [NC15748]旅游 树形dp基础

    菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...

  4. codeforce708C:树形dp+二次扫描

    题目链接 题目大意: 给你一棵树,问你对于每一个点是否可以在树上删掉一条边,再增加一条边,使它成为树的重心. tips:一个点成为重心的条件为它的每个子树大小不超过n/2. 解题思路:首先树上问题一般 ...

  5. 【每日DP】day14、P2016 战略游戏(树形DP模板)难度⭐⭐⭐

    P2016 战略游戏 这道题的城堡是一颗树 题中有 注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到. 所以定义数组f[i][1/0]f[i][1/0]f[i][1/0]表示的是节点 ...

  6. [WC2018]通道——边分治+虚树+树形DP

    题目链接: [WC2018]通道 题目大意:给出三棵n个节点结构不同的树,边有边权,要求找出一个点对(a,b)使三棵树上这两点的路径权值和最大,一条路径权值为路径上所有边的边权和. 我们按照部分分逐个 ...

  7. HDU 2196 Computer 树形DP经典题

    链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...

  8. 树形DP入门题目推荐以及解析

    关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请: ...

  9. Luogu4099 HEOI2013 SAO 组合、树形DP

    传送门 值得注意的是一般的DAG的拓扑序列数量是NP问题,所以不能直接入手 题目中给出的图可以看做是一个树形图,虽然方向比较迷.考虑使用树形图的性质 不妨任选一个点为根做树形DP,注意到数的位置与方案 ...

  10. [APIO2018]铁人两项——圆方树+树形DP

    题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方 ...

最新文章

  1. ubuntu12.04编译android4.0源代码Deug2
  2. ITK:计算图像的最小,最大,方差和均值
  3. 超全PHP学习资源整理:入门到进阶系列
  4. Android开发学习总结(三)——appcompat_v7项目说明
  5. 【小白向】springBoot初级配置
  6. Struts2文件上传与下载
  7. ping,python实现批量ping包工具--小案例v4优化版本
  8. 【备忘】大数据爬虫项目超清视频+源码
  9. esp8266教程:GPIO输入输出模式
  10. Prometheus踩坑记
  11. 飞机气动导数的插值计算_Matlab
  12. 微信小程序实现加载进度条
  13. MacOS上BeyondCompare无限试用的方法
  14. C++ Singleton的实现方法
  15. 消费者太穷不愿买手机?苹果的份额创新高,撕下国产手机遮羞布
  16. Linux可重入函数
  17. 卖保健产品怎么引流?关于做男性保健品怎么引流的详细介绍
  18. 离散数学 (II) 习题 4
  19. Python爬虫要学多久
  20. 大连 Oracle LMS,oracle rac后台进程和LMS说明

热门文章

  1. #脚本实现宠物动作行为_短视频剧情创作方法有哪些?爆款短视频的标配,只需88个脚本模板...
  2. sh执行文件 参数传递_shell中脚本参数传递的两种方式
  3. USACO翻译:USACO 2013 DEC Silver三题
  4. Kubernetes Jobs - 运行处理任务指南
  5. “智慧城市”如火如荼 与“数字城市”又有何差别?
  6. TypeId和IidManager关系
  7. 第一个应用成功上架了-武林世界
  8. Eclipse颜色主题插件-Eclipse Color Theme
  9. 【内外网映射】通过外网ip来访问虚拟机服务器【转载】
  10. 第四季-专题4-嵌入式文件系统