题目链接

原题解:

考虑我们需要的信息:子树里最浅的一个能向上的点是谁?子树里最深的一个没被覆盖的深度是多少?

我们记录一下$f_{i,a,b}$表示上面两个信息为$a$和$b$的时候,最少要花费的代价。

转移的时候枚举$c,d$进行转移,看起来就很麻烦。

然后我们注意一个结论:考虑如果$a\geq b$的话,这个$b$其实是$0$,而如果$a<b$的话,证明之后存在一个节点$x$,到$i$之后剩余能覆盖的距离至少是$b$,所以$a$和$b$中一定有一个信息是没用的。

我们令$f_{i,a}$表示存在一个还能覆盖是$a$的点,$g_{i,b}$表示存在一个深度为$b$的还没覆盖的点。

考虑暴力转移,可以通过前缀和优化直接做到$O(NK)$。

补充:

从找到“有用信息”这一步我就被拒之门外了。。。

然后“有用信息”之间也是有相互影响的关系的。搞清楚本质有助于优化DP。

代码(100分):

#include<cstdio>
#include<cstring>
#define K 202
#define M 200002
#define N 100001
inline int min(int x,int y){return x<y?x:y;}
int a[N],b[M],c[M],e[N],f[N][K],g[K],m,n;
void dfs(int u,int v)
{
for(int i=0;i<=m;i++)f[u][i]=1000000000;
for(int&i=a[u];i;i=b[i])if(c[i]!=v)
{
dfs(c[i],u);
for(int j=0;j<m;j++)g[j+1]=min(g[j+1],f[c[i]][j]+f[u][m+m-j]);
for(int j=m;j<=m<<1;j++)g[m+m-j]=min(g[m+m-j],f[c[i]][j]+f[u][m+m-j]);
for(int j=m;j<=m<<1;j++)g[j+1]=f[c[i]][j]+f[u][j+1];
for(int j=1;j<=(m<<1|1);j++)f[u][j]=min(f[u][j-1],g[j]),g[j]=1000000000;
}
for(int i=0;f[u][m<<1|1]+e[u]<f[u][i];i++)f[u][i]=f[u][m<<1|1]+e[u];
}
int i,u,v;
int main()
{
for(scanf("%d%d",&n,&m),i=1;i<=(m<<1|1);i++)g[i]=1000000000;
for(i=1;i<=n;i++)scanf("%d",e+i);
for(i=1;i<n;i++)scanf("%d%d",&u,&v),b[i<<1]=a[u],c[a[u]=i<<1]=v,b[i<<1|1]=a[v],c[a[v]=i<<1|1]=u;
return 0&(dfs(1,0),printf("%d\n",f[1][m]));
}

最新文章

  1. Win10环境下安装theano并配置GPU详细教程
  2. php连接oracle数据库的方法
  3. poj 2942 Knights of the Round Table 圆桌骑士(双连通分量模板题)
  4. 【风马一族_php】NO0_搭建web服务器
  5. selenium中定位iframe框
  6. 在 Scale Up 中使用 Health Check - 每天5分钟玩转 Docker 容器技术(145)
  7. 洛谷P2336 喵星球上的点名
  8. Nginx + Uswgi + Django的部署
  9. third party sales process 继续说
  10. DFA化简
  11. 操作Excel文件--java
  12. view的阴影效果shadowColor
  13. [洛谷P4563][JXOI2018]守卫
  14. Python全栈开发之7、模块和几种常见模块以及format知识补充
  15. 基础篇:6.2)形位公差-符号 Symbol
  16. pandas中数据框的一些常见用法
  17. C++ 4种强制类型转换
  18. Linux中Nginx安装部署
  19. qboimathtest1 t2 配对
  20. 2016.7.12 在navicat中用sql语句建表

热门文章

  1. spider_爬取斗图啦所有表情包(图片保存)
  2. 初学银河麒麟linux笔记 第九章 QEMU安装arm虚拟机
  3. 加密算法和hash
  4. kumquat
  5. iOS系统自带的扫码功能(二维码+条形码+识别本地图片)
  6. 无需联网,一键永久激活所有Windows/Office
  7. 读后笔记 -- Python 全栈测试开发 Chapter10:接口的设计与开发
  8. kubectl --v日志级别
  9. 高级测试工程师&amp;资深测试工程师应实现的价值
  10. Java高级助教工作总结