一些树上dp的复杂度证明
以下均为内网
树上染色 https://www.lydsy.com/JudgeOnline/problem.php?id=4033
可怜与超市 http://hzoj.com/contest/62/problem/5
可以简单的列出状态转移方程。
它的转移过程类似:
void dfs(int x)
{
for(unsigned i=;i<p[x].size();++i) dfs(p[x][i]);
int cur=;
memset(tmp[cur],0x3f,sizeof(tmp[cur]));
tmp[cur][][]=tmp[cur][][]=;
for(unsigned i=;i<p[x].size();++i)
{
int now=sz[p[x][i]]; cur^=;
memset(tmp[cur],0x3f,sizeof(tmp[cur]));
for(int j=;j<=sz[x];++j)
for(int k=;k<=now;++k)
{
tmp[cur][][k+j]=min(tmp[cur][][k+j],tmp[cur^][][j]+dp[][p[x][i]][k]);
tmp[cur][][k+j]=min(tmp[cur][][k+j],tmp[cur^][][j]+dp[][p[x][i]][k]);
tmp[cur][][k+j]=min(tmp[cur][][k+j],tmp[cur^][][j]+dp[][p[x][i]][k]);
}
sz[x]+=now;
}
++sz[x];
dp[][x][]=; dp[][x][]=;
for(int i=;i<=sz[x];++i) dp[][x][i]=tmp[cur][][i-]+wc[x];//db(dp[1][x][i]);
for(int i=;i<=sz[x];++i) dp[][x][i]=min(tmp[cur][][i],tmp[cur][][i-]+c[x]);
}
eg
看上去的复杂度是$O(n^3)$,
然而仔细分析,复杂度只有$O(n^2)$,可以通过n为5000左右的数据。
引入一个概念,(a,b)为树上的点对,则该点对在图中有$n^2$个
观察状态的转移,
在x节点范围内,设x有k个节点,
复杂度为:
$\sum \limits_{i=1}^{k}\sum \limits_{j=i}^{k}size_i*size_j$
我们发现这样求出来,恰好是lca为x的点对个数。
每个点对一定存在且仅存在一个lca,每个点对只会被统计不超过一次,
所以总的复杂度为$O(n^2)$。
一些树上dp的复杂度证明的更多相关文章
- 洛谷【P2458】[SDOI2006]保安站岗 题解 树上DP
题目描述 五一来临,某地下超市为了便于疏通和指挥密集的人员和车辆,以免造成超市内的混乱和拥挤,准备临时从外单位调用部分保安来维持交通秩序. 已知整个地下超市的所有通道呈一棵树的形状:某些通道之间可以互 ...
- HZOJ 20190727 T2 单(树上dp+乱搞?+乱推式子?+dfs?)
考试T2,考试时想到了40pts解法,即对于求b数组,随便瞎搞一下就oxxk,求a的话,很明显的高斯消元,但考试时不会打+没开double挂成10pts(我真sb),感觉考试策略还是不够成熟,而且感觉 ...
- codevs 1421 秋静叶&秋穣子(树上DP+博弈)
1421 秋静叶&秋穣子 题目描述 Description 在幻想乡,秋姐妹是掌管秋天的神明,作为红叶之神的姐姐静叶和作为丰收之神的妹妹穰子.如果把红叶和果实联系在一 起,自然会想到烤红薯 ...
- bzoj 2286 [Sdoi2011]消耗战(虚树+树上DP)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2286 [题意] 给定一棵树,切断一条树边代价为ci,有m个询问,每次问使得1号点与查询 ...
- 洛谷P4426 毒瘤 [HNOI/AHOI2018] 虚树+树上dp
正解:虚树+树上dp 解题报告: 传送门! 首先解释一下题意趴,,,语文70pts选手已经开始看不懂题辣QAQ 大概就是个给一个图,求独立集方案,且保证图是联通的,边的数量最多只比点多10 首先思考如 ...
- 【题解】彩色树 51nod 1868 虚树 树上dp
Prelude 题目在这里:ο(=•ω<=)ρ⌒☆ Solution 蒟蒻__stdcall的第一道虚树题qaq. 首先很容易发现,这个排列是假的. 我们只需要求出每对点之间的颜色数量,然后求个 ...
- BZOJ 4027: [HEOI2015]兔子与樱花 树上dp
4027: [HEOI2015]兔子与樱花 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline ...
- CodeForces 690C2 Brain Network (medium)(树上DP)
题意:给定一棵树中,让你计算它的直径,也就是两点间的最大距离. 析:就是一个树上DP,用两次BFS或都一次DFS就可以搞定.但两次的时间是一样的. 代码如下: #include<bits/std ...
- Codeforces Round #526 (Div. 2) D. The Fair Nut and the Best Path 树上dp
D. The Fair Nut and the Best Path 题意:给出一张图 点有权值 边也要权值 从任意点出发到任意点结束 到每个点的时候都可以获得每个点的权值,而从边走的时候都要消耗改边的 ...
随机推荐
- 一个 Github 上使用 HttpClient 的 Sample
地址:https://github.com/MikeWasson/HttpClientSample 截图: 直接贴代码了: 服务端: [RoutePrefix("api/products&q ...
- 《 .NET并发编程实战》阅读指南 - 第11章
先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.
- rabbitmq 延迟队列
1.rabbitmq 延时的原理,有2个队列,一个是发送消息,设置消息过期时间或者队列过期时间(死信队列),如果达到过期时间后 将改消息发送到指定的队列中进行处理. 链接:https://share. ...
- 用SWFUpload上传图片小例子
在开发项目中,经常会用到上传图片,接下来我就用一种简单的方式给大家分享一下使用SWFUpload的方式上传图片. 1.在网站根目录下新建一个SWFUpload文件夹,把下载的组建放在SWFUpload ...
- flink Reduce、GroupReduce、GroupCombine笔记
1.reduce操作,在分组的dataset上使用,也可以在不分组的dataset上使用 应用于分组DataSet的Reduce转换使用用户定义的reduce函数将每个组减少为单个元素.对于每组输入元 ...
- 【spring data jpa】带有条件的查询后分页和不带条件查询后分页实现
一.不带有动态条件的查询 分页的实现 实例代码: controller:返回的是Page<>对象 @Controller @RequestMapping(value = "/eg ...
- Linux从入门到精通总结(非原创)
文章大纲 一.课程内容总结二.课程学习地址三.学习资料下载四.参考文章 一.课程内容总结 二.课程学习地址 第一天:https://www.cnblogs.com/WUXIAOCHANG/p/10 ...
- Linux shell while循环语句
for :明确循环次数 while :不确定循环换次数 while循环 (1) while CONDITION:do statement statement < ...
- pycharm Launching unittests with arguments
在运行程序时出现 但是代码没有错 源代码是: 这是运行时启动了测试 解决方法: File-> Settings -> Tools -> Python Integrated Tools ...
- pandas 生成并排放置的条形图和箱线图
1.代码 import numpy as np import pandas as pd import matplotlib.pyplot as plt # 生成数据,创建 DataFrame np.r ...