洛谷 4099 [HEOI2013]SAO——树形DP
题目: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 ;
}
洛谷 4099 [HEOI2013]SAO——树形DP的更多相关文章
- 洛谷P4099 [HEOI2013]SAO(树形dp)
传送门 HEOI的题好珂怕啊(各种意义上) 然后考虑树形dp,以大于为例 设$f[i][j]$表示$i$这个节点在子树中排名第$j$位时的总方案数(因为实际只与相对大小有关,与实际数值无关) 我们考虑 ...
- 洛谷 P4099 - [HEOI2013]SAO(树形 dp)
题面传送门 题意: 有一个有向图 \(G\),其基图是一棵树 求它拓扑序的个数 \(\bmod (10^9+7)\) \(n \in [1,1000]\) 如果你按照拓扑排序的方法来做,那恐怕你已经想 ...
- 洛谷$P4099\ [HEOI2013]\ SAO\ dp$
正解:树形$dp$ 解题报告: 传送门$QwQ$. 考虑设$f_i$表示点$i$的子树内的拓扑序排列方案数有多少个. 发现这样不好合并儿子节点和父亲节点.于是加一维,设$f_{i,j}$表示点$i$的 ...
- [BZOJ3167][P4099][HEOI2013]SAO(树形DP)
题目描述 Welcome to SAO ( Strange and Abnormal Online).这是一个 VR MMORPG, 含有 n 个关卡.但是,挑战不同关卡的顺序是一个很大的问题. 有 ...
- 3167: [Heoi2013]Sao [树形DP]
3167: [Heoi2013]Sao 题意: n个点的"有向"树,求拓扑排序方案数 Welcome to Sword Art Online!!! 一开始想错了...没有考虑一个点 ...
- C++ 洛谷 2014 选课 from_树形DP
洛谷 2014 选课 没学树形DP的,看一下. 首先要学会多叉树转二叉树. 树有很多种,二叉树是一种人人喜欢的数据结构,简单而且规则.但一般来说,树形动规的题目很少出现二叉树,因此将多叉树转成二叉树就 ...
- $loj10156/$洛谷$2016$ 战略游戏 树形$DP$
洛谷loj Desription Bob 喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的方法.现在他有个问题. 现在他有座古城堡,古城堡的路形成一棵树.他要在这棵树的节点上放置最少数 ...
- [洛谷P2016] 战略游戏 (树形dp)
战略游戏 题目描述 Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题. 他要建立一个古城堡,城堡中的路形成一棵树.他要在这棵树的结点上放置最少数目的士兵,使得 ...
- 洛谷P2607 [ZJOI2008]骑士(树形dp)
题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬. 最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里, ...
随机推荐
- linux sed如何锁定某一行数据进行替换
- IAR MSP430怎么破解?IAR for MSP430安装注册破解激活图文详细教程
IAR for MSP430全称IAR Embedded Workbench for MSP430,是一款功能强大的专业集成开发环境,软件包括项目管理.配置开发环境.创建编译器.定制具体编程方案等 ...
- 大数据学习笔记之Zookeeper(一):Zookeeper理论篇(一)
文章目录 1.1 概述 1.2 应用场景 1.3 下载地址 1.1 概述 Zookeeper是一个开源的分布式的,为分布式应用提供协调服务的Apache项目. Zookeeper从设计模式角度来理解: ...
- Easyui表格显示日期格式错误
问题 如下图: 解决办法: 以Sql Server 2008为例,在执行查询时,把“采购日期”字段由datetime转换为string,前端以string类型显示.
- 23.协程的使用场景,高I/O密集型程序
import time def one_hundred_millionA(): start_time = time.time() i = 0 for _ in range(100000000): i ...
- 08 (h5*) js第9天--原型、继承
目录: 1:原型和原型链 2:构造函数的原型可以改变 3:原型的最终指向 4:先修改原型指向,在添加方法. 5:实例对象中的属性和原型属性重合, 6:一个神奇的原型链 7:继承 8:原型链 9:利用c ...
- python字典、字符串(json串)、字节串之间的转化
字典和json字符串(本质也是字符串)之间的转化用json.dumps和json.loads() json.dumps(): 字典→json字符串 json.loads(): json字符 ...
- SAP选择屏幕开发(一)(转)
原文链接:https://blog.csdn.net/wtxhai/article/details/90632686 用户通过屏幕操作来实现与SAP的数据交互,而SAP的屏幕开发一般分为两种,一种是通 ...
- JavaWeb学习——session总结
一.session简介 sesion也就是会话,Session对象存储特定用户会话所需的属性及配置信息.这样,当用户在应用程序的Web页之间跳转时,存储在Session对象中的变量将不会丢失,而是在整 ...
- Lock和synchronized使用
该文章主要讲解如何快速应用Lock和synchronized 读者可以自行学习Lock和synchronized系统级比较:可参考并发实战等,自己决定什么场景下使有哪种锁 Lock使用案例: publ ...