Light OJ 1382 The Queue(树形DP+数学)
来源:互联网 发布:淘宝在哪里查看扣分 编辑:程序博客网 时间:2024/06/09 17:52
题意:n个人排队,每个人b除CEO外都有一个监督人a,b必须排在a的后面,问有多少排队方案。
解析:显然是一个树形DP,简单想想子树的合并后的方案数怎么算就好了,挺简单的题。
设dp[i]为以i为根的子树中对应的方案数,num[i]是以i为根的子树的节点数。
下面考虑将两个队伍v1,v2合并一个队伍。
其对应的方案数为C(num[v1]+num[v2],num[v1])*dp[v1]*dp[v2]。
依据这个进行dfs。
[code]:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const LL MOD = 1e9+7;struct Nod{ int b,next; void init(int b,int next){ this->b=b;this->next=next; }}buf[2005];LL C[2005][2005],Mul[2005],dp[1005];int n,len,E[1005],num[1005],deg[1005],root;void init(){ len = 0; memset(E,-1,n*sizeof(int)); memset(deg,0,n*sizeof(int));}void addEdge(int a,int b){ buf[len].init(b,E[a]);E[a]=len++; buf[len].init(a,E[b]);E[b]=len++;}void dfs(int u,int pre){ int i,v; dp[u] = 1;num[u] = 1; for(i = E[u];i != -1;i = buf[i].next){ v = buf[i].b; if(v == pre) continue; dfs(v,u); num[u] += num[v]; dp[u] = C[num[u]-1][num[v]]*dp[u]%MOD*dp[v]%MOD; }}int main(){ int i,j,cas,T; Mul[0] = C[0][0] = 1; for(i = 1;i <= 2000;i++){ Mul[i] = (i*Mul[i-1])%MOD; C[i][0] = C[i][i] = 1; for(j = 1;j < i;j++) C[i][j] = (C[i-1][j]+C[i-1][j-1])%MOD; } scanf("%d",&cas); for(T = 1;T <= cas;T++){ scanf("%d",&n); init(); int u,v; for(i = 1;i < n;i++){ scanf("%d%d",&u,&v);u--,v--; addEdge(u,v); deg[v]++; } for(i = 0;i < n;i++) if(!deg[i]) root = i; dfs(root,-1); printf("Case %d: %lld\n",T,dp[root]); } return 0;}
0 0
- Light OJ 1382 The Queue(树形DP+数学)
- Light OJ 1382 The Queue(组合计数)
- Light oj 1230 - Placing Lampposts(树形dp)
- Light OJ 1252 Maintaining Communities (树形DP)
- SPFA + 树形DP:The Ghost Blows Light
- HDU4276 The Ghost Blows Light 树形DP
- UVALive 5002/ lightoj 1382 The Queue(树形DP)
- Light oj 1201 - A Perfect Murder(树形dp)
- Light oj 1252 - Maintaining Communities(树形dp)
- Light OJ 1201 A Perfecr Murder (简单树形DP)
- Light OJ 1230 Placing Lampposts(简单树形DP)
- hdu 4276 The Ghost Blows Light(DP-树形DP)
- Light OJ 1170 Counting Perfect BST (DP+数学)
- light oj 1058(数学)
- Light OJ:1328 A Gift from the Setter(数学)
- 数学期望,I - Beating the Dataset,Light OJ 1274
- HDU 4276 The Ghost Blows Light 树形dp
- HDU 4276 The Ghost Blows Light(树形DP)
- maven 骨架项目
- C#中的线程(三) 使用多线程
- HDU 3749 Financial Crisis 点双连通分量
- 面试2 -- Java抽象类与接口的区别
- C#多线程简单例子讲解
- Light OJ 1382 The Queue(树形DP+数学)
- 快速排序
- 深入Java虚拟机(2)——Java的平台无关性
- PCA的数学原理
- javaIO流
- python生成格雷码
- Android 图片三级缓存之内存缓存(告别软引用(SoftRefrerence)和弱引用(WeakReference))
- Unity dll 热更新 前奏
- Git学习总结