lightoj 1382 - The Queue(树形dp)
题目链接: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)相关推荐
- BNUOJ 52305 Around the World 树形dp
题目链接: https://www.bnuoj.com/v3/problem_show.php?pid=52305 Around the World Time Limit: 20000msMemory ...
- fwt优化+树形DP HDU 5909
1 //fwt优化+树形DP HDU 5909 2 //见官方题解 3 // BestCoder Round #88 http://bestcoder.hdu.edu.cn/ 4 5 #include ...
- [NC15748]旅游 树形dp基础
菜鸡第一次接触树形dp这个东西,不过这个东西还是很好理解的(可能是因为模板题吧) 个人感觉,相比线性dp,树形dp的状态转移方程更加的直观,难点主要是在"树"的结构上比较麻烦. 题 ...
- codeforce708C:树形dp+二次扫描
题目链接 题目大意: 给你一棵树,问你对于每一个点是否可以在树上删掉一条边,再增加一条边,使它成为树的重心. tips:一个点成为重心的条件为它的每个子树大小不超过n/2. 解题思路:首先树上问题一般 ...
- 【每日DP】day14、P2016 战略游戏(树形DP模板)难度⭐⭐⭐
P2016 战略游戏 这道题的城堡是一颗树 题中有 注意,某个士兵在一个结点上时,与该结点相连的所有边将都可以被了望到. 所以定义数组f[i][1/0]f[i][1/0]f[i][1/0]表示的是节点 ...
- [WC2018]通道——边分治+虚树+树形DP
题目链接: [WC2018]通道 题目大意:给出三棵n个节点结构不同的树,边有边权,要求找出一个点对(a,b)使三棵树上这两点的路径权值和最大,一条路径权值为路径上所有边的边权和. 我们按照部分分逐个 ...
- HDU 2196 Computer 树形DP经典题
链接:http://acm.hdu.edu.cn/showproblem.php? pid=2196 题意:每一个电脑都用线连接到了还有一台电脑,连接用的线有一定的长度,最后把全部电脑连成了一棵树,问 ...
- 树形DP入门题目推荐以及解析
关于树形DP几道入门题目 今天恶补树形DP,感觉海星. 其实挺简单的. 介绍几道例题,我会的. 1.洛谷P1352 没有上司的舞会 我的一篇题解 我们可以考虑每一个节点都是有两种情况. 一个是被邀请: ...
- Luogu4099 HEOI2013 SAO 组合、树形DP
传送门 值得注意的是一般的DAG的拓扑序列数量是NP问题,所以不能直接入手 题目中给出的图可以看做是一个树形图,虽然方向比较迷.考虑使用树形图的性质 不妨任选一个点为根做树形DP,注意到数的位置与方案 ...
- [APIO2018]铁人两项——圆方树+树形DP
题目链接: [APIO2018]铁人两项 对于点双连通分量有一个性质:在同一个点双里的三个点$a,b,c$,一定存在一条从$a$到$c$的路径经过$b$且经过的点只被经过一次. 那么我们建出原图的圆方 ...
最新文章
- ubuntu12.04编译android4.0源代码Deug2
- ITK:计算图像的最小,最大,方差和均值
- 超全PHP学习资源整理:入门到进阶系列
- Android开发学习总结(三)——appcompat_v7项目说明
- 【小白向】springBoot初级配置
- Struts2文件上传与下载
- ping,python实现批量ping包工具--小案例v4优化版本
- 【备忘】大数据爬虫项目超清视频+源码
- esp8266教程:GPIO输入输出模式
- Prometheus踩坑记
- 飞机气动导数的插值计算_Matlab
- 微信小程序实现加载进度条
- MacOS上BeyondCompare无限试用的方法
- C++ Singleton的实现方法
- 消费者太穷不愿买手机?苹果的份额创新高,撕下国产手机遮羞布
- Linux可重入函数
- 卖保健产品怎么引流?关于做男性保健品怎么引流的详细介绍
- 离散数学 (II) 习题 4
- Python爬虫要学多久
- 大连 Oracle LMS,oracle rac后台进程和LMS说明
热门文章
- #脚本实现宠物动作行为_短视频剧情创作方法有哪些?爆款短视频的标配,只需88个脚本模板...
- sh执行文件 参数传递_shell中脚本参数传递的两种方式
- USACO翻译:USACO 2013 DEC Silver三题
- Kubernetes Jobs - 运行处理任务指南
- “智慧城市”如火如荼 与“数字城市”又有何差别?
- TypeId和IidManager关系
- 第一个应用成功上架了-武林世界
- Eclipse颜色主题插件-Eclipse Color Theme
- 【内外网映射】通过外网ip来访问虚拟机服务器【转载】
- 第四季-专题4-嵌入式文件系统