bzoj 3167 SAO
树dp
定义f[i][j]为i在其已合并子树内排名为j的方案数
O(n2)进行子树合并
转移时枚举他在已合并子树中的排名j和新合并子树中的排名k+1
当他比他儿子大的时候$f[x][j+k]=f[x][j]*{\sum{_{i}^{k}}}f[son][i]*C{_{j+k-1}^{j-1}}*C{_{size[x]+size[son]-j-k}^{size[x]-j}}$
后面两个组合数可以看作是有j+k-1个比他小的要选出j-1个放原子树中的,剩下的放新子树中的,后面就是比他大的,同理
当他比他儿子小的时候只需要把前缀和转化成后缀和即可。
代码
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define mod 1000000007
#define LL long long
#define N 1050
using namespace std;
int e=,head[N];
struct edge{
int v,w,next;
}ed[*N];
void add(int u,int v,int w){
ed[e].v=v;ed[e].w=w;
ed[e].next=head[u];
head[u]=e++;
}
LL C[N][N],f[N][N],sum[N][N],g[N];
int fa[N],size[N];
void dfs(int x){
size[x]=;f[x][]=;
for(int i=head[x];i;i=ed[i].next){
int v=ed[i].v;
if(v==fa[x])continue;
fa[v]=x;dfs(v);
for(int j=;j<=size[x]+size[v];j++)g[j]=;
for(int j=;j<=size[x];j++){
for(int k=;k<=size[v];k++){
if(ed[i].w==)
(g[j+k]+=f[x][j]*sum[v][k]%mod*C[j+k-][j-]%mod*C[size[x]+size[v]-j-k][size[x]-j]%mod)%=mod;
else
(g[j+k]+=f[x][j]*(sum[v][size[v]]-sum[v][k]+mod)%mod*C[j+k-][j-]%mod*C[size[x]+size[v]-j-k][size[x]-j]%mod)%=mod;
}
}
size[x]+=size[v];
for(int j=;j<=size[x];j++)f[x][j]=g[j];
}
for(int i=;i<=size[x];i++)
sum[x][i]=(sum[x][i-]+f[x][i])%mod;
}
void init(){
e=;
memset(head,,sizeof head);
memset(sum,,sizeof sum);
memset(size,,sizeof size);
memset(fa,,sizeof fa);
memset(f,,sizeof f);
}
int n;
char getc(){
char ch=getchar();
while((ch!='<')&&(ch!='>'))ch=getchar();
return ch;
}
signed main(){
int T;
scanf("%d",&T);
for(int i=;i<=;i++){
C[i][]=;
for(int j=;j<=i;j++)
C[i][j]=(C[i-][j-]+C[i-][j])%mod;
}
while(T--){
init();
scanf("%d",&n);
for(int i=,u,v;i<n;i++){
scanf("%d",&u);char ch=getc();scanf("%d",&v);
u++;v++;
if(ch=='<'){add(u,v,);add(v,u,);}
if(ch=='>'){add(u,v,);add(v,u,);}
}
dfs();
printf("%lld\n",sum[][size[]]);
}
return ;
}
bzoj3167
bzoj 3167 SAO的更多相关文章
- [BZOJ 3167][HEOI 2013]SAO
[BZOJ 3167][HEOI 2013]SAO 题意 对一个长度为 \(n\) 的排列作出 \(n-1\) 种限制, 每种限制形如 "\(x\) 在 \(y\) 之前" 或 & ...
- BZOJ 3167: [Heoi2013]Sao
3167: [Heoi2013]Sao Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 96 Solved: 36[Submit][Status][D ...
- BZOJ 3167 [Heoi2013]Sao ——树形DP
BZOJ4824的强化版. 改变枚举的方案,使用前缀和进行DP优化. 然后复杂度就是$O(n^2)$了. #include <map> #include <cmath> #in ...
- bzoj 4824: [Cqoi2017]老C的键盘
Description 老 C 是个程序员. 作为一个优秀的程序员,老 C 拥有一个别具一格的键盘,据说这样可以大幅提升写程序的速度,还能让写出来的程序 在某种神奇力量的驱使之下跑得非常快.小 ...
- [提升性选讲] 树形DP进阶:一类非线性的树形DP问题(例题 BZOJ4403 BZOJ3167)
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/7337179.html 树形DP是一种在树上进行的DP相对比较难的DP题型.由于状态的定义多种多样,因此解法也五 ...
- 3167: [Heoi2013]Sao [树形DP]
3167: [Heoi2013]Sao 题意: n个点的"有向"树,求拓扑排序方案数 Welcome to Sword Art Online!!! 一开始想错了...没有考虑一个点 ...
- 【BZOJ3167】[HEOI2013]SAO(动态规划)
[BZOJ3167][HEOI2013]SAO(动态规划) 题面 BZOJ 洛谷 题解 显然限制条件是一个\(DAG\)(不考虑边的方向的话就是一棵树了). 那么考虑树型\(dp\),设\(f[i][ ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
随机推荐
- Python__flask初识
1. debug:在app.run()里面加上app.run(debug=True), 在浏览器中调试的时候可以直接显示出错误. 2. 在url中传递参数,可以这样 @app.route('/ch ...
- 【.Net架构】BIM软件架构03:Web管控平台MVC架构
一.前言 上一篇讲述的是将BIM平台后台架构CoreService.sln,该解决方案主要作用是对管控平台的核心业务进行封装,然后让前端的ApiController去调用该解决方案中的对 ...
- mysql统计类似SQL语句查询次数
mysql统计类似SQL语句查询次数 vc-mysql-sniffer 工具抓取的sql分析. 1.先用shell脚本把所有enter符号替换为null,再根据语句前后的字符分隔语句 grep -Ev ...
- AngularJs 学习笔记(四)服务
模型是指$scope上保存的包含瞬时状态数据的JavaScript对象. 服务是一个单例对象,只会被$injector实例化一次,并且是在需要的时候才会被创建,服务提供了把与特定功能相关联的方法集中在 ...
- Angular6.0发布
Angular v6 新版本重点关注工具链以及工具链在 Angular 中的运行速度问题. Angular v6 是统一整体框架.Material 和 CLI 三大 Angular 组件的第一个版本, ...
- GitHub awesome Resource
各种Awesome技术资源的资源聚合: https://github.com/sindresorhus/awesome Contents Platforms Programming Languages ...
- JavaScript头像上传器的实现
最近做这方面的东西,刚开始准备用一个开源项目:https://github.com/yueyoum/django-upload-avatar 后来发现这个开源组件的原设计者的定制化选项设计略显复杂,发 ...
- 2013-8:SDCE大会笔记
百度移动云三大开发框架:Clouda,SiteApp,AppBuilder MBaaS解决高性能Server很难的问题 百度开放云的区域运营服务于创业者 Pinterest架构变迁: 互联网就是把线下 ...
- 开始记录学习java的笔记
今天开始记录学习java的笔记,加油
- 一些Gym三星单刷的比赛总结
RDC 2013, Samara SAU ACM ICPC Quarterfinal Qualification Contest G 思路卡成智障呀! Round 1:对着这个魔法阵找了半天规律,效果 ...