一些树上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 题意:给出一张图 点有权值 边也要权值 从任意点出发到任意点结束 到每个点的时候都可以获得每个点的权值,而从边走的时候都要消耗改边的 ...
随机推荐
- 整理了八个开源的 Spring Boot 学习资源
Spring Boot 算是目前 Java 领域最火的技术栈了,松哥年初出版的 <Spring Boot + Vue 全栈开发实战>迄今为止已经加印了 3 次,Spring Boot 的受 ...
- python网络爬虫(2)——scrapy框架的基础使用
这里写一下爬虫大概的步骤,主要是自己巩固一下知识,顺便复习一下. 一,网络爬虫的步骤 1,创建一个工程 scrapy startproject 工程名称 创建好工程后,目录结构大概如下: 其中: sc ...
- Prometheus 安装Grafana与Prometheus集成
Prometheus 安装Grafana与Prometheus集成 Grafana是一个开源的度量分析和可视化系统. 下载地址:https://grafana.com/grafana/download ...
- 【java】javac编译多个有依赖关系的java文件为class文件
历史文章: [jar]JDK将单个的java文件打包为jar包,并引用到项目中使用[MD5加密] [java]javac命令在win10不可用,提示javac不是内部或外部命令,也不是可运行的程序[解 ...
- 虚拟机Ubuntu18.04 root下 连接 windows 中 winScp
先查看自己虚拟机中是否有 ssh服务 如果没有的话先安装 apt-get install openssh-server 安装完之后 先手动开启一下服务 /etc/init.d/ssh restart ...
- H5页面基础元素
H5页面结构元素示例 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=&quo ...
- django 开发Broken pipe from ('127.0.0.1', 58078)问题解决
最近写的一个项目,前端使用了表单submit提交,后端接收POST数据存储.实际上的逻辑并不复杂, django接收到的时候会产生Broken pipe from ('127.0.0.1', 5807 ...
- Vue入门篇
Vue-cli开发环境搭建 1. 安装nodejs 2. 设置缓存文件夹 $ npm config set cache "D:\vueProject\nodejs\node_cache&qu ...
- jqmobile FAQ
1. 用JavaScript弹出对话框 $("#msgBox").popup("open"); <div data-role="popup&qu ...
- 是否忘记了向源中添加“#include "StdAfx.h"”?
错误分析 此错误发生的原因是编译器在寻找预编译指示头文件(默认#include "stdafx.h")时,文件未预期结束.没有找到预编译指示信息的头文件"stdafx.h ...