博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
3167: [Heoi2013]Sao [树形DP]
阅读量:6711 次
发布时间:2019-06-25

本文共 1787 字,大约阅读时间需要 5 分钟。

题意:

n个点的“有向”树,求拓扑排序方案数


Welcome to Sword Art Online!!!

一开始想错了...没有考虑一个点的孩子可以排在父亲后...

为了能转移,给状态加一维,\(f[i][j]\)表示子树i,i排在第j位的方案数

然后,很像树形背包啊,转移枚举孩子子树中k个点在i之前,更新\(f[i][j+k]\)

严格做到每次合并复杂度为 **“已经合并大小*正要合并进去的大小”,那么这个复杂度就是\(O(n^2)\)的,因为一个点对只贡献一次**

真不敢相信我以前的树形背包都写的是\(O(n^3)\)

注意需要用一个新数组保存当前更新得到的值

#include 
#include
#include
#include
#include
using namespace std;typedef long long ll;const int N = 1005, P = 1e9+7;inline int read() { char c=getchar(); int x=0,f=1; while(c<'0'||c>'9') {if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9') {x=x*10+c-'0';c=getchar();} return x*f;}int n, u, v, c[N][N];char s[5];struct edge{int v, ne, p;} e[N<<1];int cnt, h[N];inline void ins(int u, int v) { //printf("ins %d %d\n", u, v); e[++cnt] = (edge){v, h[u], 1}; h[u] = cnt; e[++cnt] = (edge){u, h[v], 0}; h[v] = cnt;}int f[N][N], size[N], f_pre[N][N], f_suf[N][N], g[N];void dp(int u, int fa) { size[u] = 1; f[u][1] = 1; for(int i=h[u]; i; i=e[i].ne) { int v = e[i].v, p = e[i].p; if(v == fa) continue; dp(v, u); for(int j = 0; j <= size[u] + size[v]; j++) g[j] = 0; for(int j = 1; j <= size[u]; j++) for(int k = 0; k <= size[v]; k++) { ll t = p ? f_suf[v][k+1] : f_pre[v][k]; g[j+k] = (g[j+k] + (ll) c[j-1+k][k] * c[size[u]-j+size[v]-k][size[v]-k] %P * f[u][j] %P * t) %P; } for(int j = 0; j <= size[u] + size[v]; j++) f[u][j] = g[j]; size[u] += size[v]; } for(int i = 1; i <= size[u]; i++) f_pre[u][i] = (f_pre[u][i-1] + f[u][i]) %P; for(int i = size[u]; i >= 1; i--) f_suf[u][i] = (f_suf[u][i+1] + f[u][i]) %P;}int main() { freopen("in", "r", stdin); int T = read(); c[0][0] = 1; for(int i=1; i

转载地址:http://hvilo.baihongyu.com/

你可能感兴趣的文章
上载和下载CSV文件
查看>>
电脑上做的ppt拿到别的电脑或手机上播放的时候字体错位的解决方法
查看>>
C++ Group Project
查看>>
机械手相机9点坐标标定-基于C#+EmguCV
查看>>
ThinkPHP 5 验证码
查看>>
php实例根据ID删除mysql表中的数据
查看>>
静态和全局变量的作用域zz
查看>>
1."问吧APP"客户需求调查分析
查看>>
[题解]UVA10269 Adventure of Super Mario
查看>>
LCT
查看>>
VIJOS-P1635 城市连接
查看>>
chown命令详情
查看>>
强数学归纳法
查看>>
第三次作业结对编程
查看>>
jQuery总结(摘抄)
查看>>
_stat函数/struct stat 结构体使用笔记
查看>>
二分搜索 HDOJ 2289 Cup
查看>>
Altium 技巧 记录
查看>>
Byte[]、Image、Bitmap 之间的相互转换
查看>>
分布式全文检索引擎之ElasticSearch
查看>>