题目:https://www.luogu.org/problemnew/show/P4099

结果还是看了题解才会……

关键是状态,f[ i ][ j ] 表示 i 子树、 i 号点是第 j 个出现的方案数。

合并的时候,很重要的是去枚举孩子 v 有 k 个点放在了第 i 个点前面。这样 v 可以在的位置就根据该边是 > 还是 < 而是一个前/后缀。这样就是 n2 的了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int rdn()
{
int ret=;bool fx=;char ch=getchar();
while(ch>''||ch<''){if(ch=='-')fx=;ch=getchar();}
while(ch>=''&&ch<='')ret=ret*+ch-'',ch=getchar();
return fx?ret:-ret;
}
int Mn(int a,int b){return a<b?a:b;}
const int N=,mod=1e9+;
int upt(int x){while(x>=mod)x-=mod;while(x<)x+=mod;return x;} int n,siz[N],c[N][N],f[N][N],pr[N][N],sc[N][N];
int hd[N],xnt,to[N<<],nxt[N<<];bool lx[N<<];//1:<
char ch;
void add(int x,int y,bool fx)
{ to[++xnt]=y;nxt[xnt]=hd[x];hd[x]=xnt;lx[xnt]=fx;}
void dfs(int cr,int fa)
{
siz[cr]=; f[cr][]=;//
for(int i=hd[cr],v;i;i=nxt[i])
if((v=to[i])!=fa)
{
dfs(v,cr); siz[cr]+=siz[v];
for(int j=siz[cr];j;j--)
{
int lj=;
for(int k=,l2=Mn(j-,siz[v]);k<=l2;k++)
{
int tp=;
if(lx[i]) tp=(ll)f[cr][j-k]*sc[v][k+]%mod;
else tp=(ll)f[cr][j-k]*pr[v][k]%mod;
tp=(ll)tp*c[j-][k]%mod*c[siz[cr]-j][siz[v]-k]%mod;
lj=upt(lj+tp);
}
f[cr][j]=lj;
}
}
pr[cr][]=sc[cr][siz[cr]+]=;///
for(int j=;j<=siz[cr];j++)
{
pr[cr][j]=upt(pr[cr][j-]+f[cr][j]);
}
for(int j=siz[cr];j;j--)
{
sc[cr][j]=upt(sc[cr][j+]+f[cr][j]);
}
pr[cr][]=sc[cr][siz[cr]+]=;
}
int main()
{
int T=rdn(),lm=;
for(int i=;i<=lm;i++)c[i][]=;
for(int i=;i<=lm;i++)
for(int j=;j<=i;j++)
c[i][j]=upt(c[i-][j]+c[i-][j-]);
while(T--)
{
n=rdn(); memset(hd,,sizeof hd); xnt=;
for(int i=,u,v;i<n;i++)
{
u=rdn()+;cin>>ch;v=rdn()+;
add(u,v,ch=='<'); add(v,u,ch=='>');
}
dfs(,);
printf("%d\n",sc[][]);
}
return ;
}

最新文章

  1. 超详细mysql left join,right join,inner join用法分析
  2. JavaMail: SSL vs TLS vs STARTTLS
  3. spring学习遇到的问题汇总
  4. 【原】react+redux实战
  5. hdfs 集群间拷贝
  6. JS判断登陆端是PC还是手机
  7. struts2:struts.xml配置文件详解
  8. 地图API使用文档-以腾讯地图为例
  9. dwz ie10一直提示数据加载中
  10. xheditor上传图片的java实现
  11. sql server 汉字的长度
  12. java代码用dom4j解析xml文件的简单操作
  13. 利刃 MVVMLight 5:绑定在表单验证上的应用
  14. 变位词(0029)-swustoj
  15. 【js 实践】js 实现木桶布局
  16. 用nodejs 开发的智能提示
  17. zabbix学习笔记----概念----2019.03.25
  18. emacs初步学习
  19. [knowledge][ETA] Encrypted Traffic Analytics
  20. php pdo对象使用详解: 连接数据库与exec方法

热门文章

  1. fiddler抓取火狐浏览器上https协议请求
  2. Kubernetes tutorial - K8S 官方入门教程
  3. Vue事件总线
  4. [LeetCode] 342. Power of Four(位操作)
  5. [Linux] 029 脚本安装包
  6. spring-第八篇之容器中的bean的生命周期
  7. python中bytes和str
  8. python学习第二十七天函数的return返回值
  9. java 日期工具
  10. 安装weblogic界面安装