题目链接

原题解:

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

我们记录一下$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]));
}

【2020NOI.AC省选模拟#6】A. zyb的监控计划的更多相关文章

  1. NOI.AC省选模拟赛第一场 T1 (树上高斯消元)

    link 很容易对于每个点列出式子 \(f_{x,y}=(f_{x,y-1}+f_{x,y}+f_{x,y+1}+f_{x+1,y})/4\)(边角转移类似,略) 这个转移是相互依赖的就gg了 不过你 ...

  2. [NOI.AC省选模拟赛3.31] 星辰大海 [半平面交]

    题面 传送门 思路 懒得解释了......也是比较简单的结论 但是自己看到几何就退缩了...... 下周之内写一个计算几何的学习笔记! Code #include<iostream> #i ...

  3. [NOI.AC省选模拟赛3.31] 附耳而至 [平面图+最小割]

    题面 传送门 思路 其实就是很明显的平面图模型. 不咕咕咕的平面图学习笔记 用最左转线求出对偶图的点,以及原图中每个边两侧的点是谁 建立网络流图: 源点连接至每一个对偶图点,权值为这个区域的光明能量 ...

  4. [NOI.AC省选模拟赛3.30] Mas的童年 [二进制乱搞]

    题面 传送门 思路 这题其实蛮好想的......就是我考试的时候zz了,一直没有想到标记过的可以不再标记,总复杂度是$O(n)$ 首先我们求个前缀和,那么$ans_i=max(pre[j]+pre[i ...

  5. [NOI.AC省选模拟赛3.23] 染色 [点分治+BFS序]

    题面 传送门 重要思想 真的是没想到,我很久以来一直以为总会有应用的$BFS$序,最终居然是以这种方式出现在题目中 笔记:$BFS$序可以用来处理限制点对距离的题目(综合点分树使用) 思路 本题中首先 ...

  6. [NOI.AC省选模拟赛3.23] 集合 [数学]

    题面 传送门 一句话题意: 给定$n\leq 1e9,k\leq 1e7,T\leq 1e9$ 设全集$U=\lbrace 1,2,3,...n\rbrace $,求$(min_{x\in S}\lb ...

  7. [noi.ac省选模拟赛]第12场题解集合

    题目 比赛界面. T1 数据范围明示直接\(O(n^2)\)计算,问题就在如何快速计算. 树上路径统计通常会用到差分方法.这里有两棵树,因此我们可以做"差分套差分",在 A 树上对 ...

  8. [noi.ac省选模拟赛]第10场题解集合

    题目 比赛界面. T1 不难想到,对于一个与\(k\)根棍子连接的轨道,我们可以将它拆分成\(k+1\)个点,表示这条轨道不同的\(k+1\)段. 那么,棍子就成为了点与点之间的边.可以发现,按照棍子 ...

  9. [noi.ac省选模拟赛]第11场题解集合

    题目   比赛界面. T1   比较简单.容易想到是求鱼竿的最大独立集.由于题目的鱼竿可以被分割为二分图,就可以想到最大匹配.   尝试建边之后会发现边的数量不小,但联系题目性质会发现对于一条鱼竿,它 ...

  10. [noi.ac省选模拟赛20200606]赌怪

    题目   点这里看题目. 分析   先特判掉\(K=2\)的情况.   首先可以考虑到一个简单 DP :   \(f(i)\):前\(i\)张牌的最大贡献.   转移可以\(O(n^2)\)地枚举区间 ...

随机推荐

  1. [iOS]获取地理位置信息

    1.在工程的 info.plist 文件中增加两个key( 右键 - Add Row ) Privacy - Location Always and When In Use Usage Descrip ...

  2. [746] Interlude Update 3

    [746] Interlude Update 3 Client 00 SendProtocolVersion 01 MoveBackwardToLocation 02 Say 03 RequestEn ...

  3. 实验一-密码引擎-加密API实现与测试

    实验一-密码引擎-加密API实现与测试 1 下载并查找GMT 0018-2012密码设备应用接口规范原始文档进行学习 (5分) 2 实现GMT 0018-2012密码设备应用接口规范的接口函数,至少实 ...

  4. Micro-OA系统

    Micro-OA简单描述 MicroOA是一款不需要专业的开发知识或开发经验,通过页面交互式即可实现动态搭建表单的微型办公自动化系统.在日常工作当中,我们面临着各种各样的表单,在开发系统时,若我们采用 ...

  5. 15、java递归解决迷宫问题

    递归真是一个.看着简单,听着简单,写不出来,想不到.以前也不是不理解递归,也不是看不懂递归的代码,但说实话真的很难想到自己去用这个递归也很难理清楚这个递归到底从哪里开始到哪里结束,将哪个步骤作为 一个 ...

  6. Python学习笔记(二)变量的使用

    一.变量的定义 把程序运算的中间结果临时存到内存里,以备后面的代码继续调用,这几个名字的学名就叫做"变量" 可以把变量看做保存信息的容器,它们的目的是在内存中标注和存储数据,然后可 ...

  7. (0821) git 下拉code不稳

    (1)红帽粘贴  vncconfig & (2)csh不稳定 解决办法: bash eval "$(ssh-agent -s)" ssh-add git pull 或者 g ...

  8. Wix Setting language and code page attributes

    When you localize your MSI package, you'll need to alter your Productand Package elements to suit. T ...

  9. python自动化模块及运维工具

    1. psutil 可以获取系统运行的进程和系统利用率(CPU 内存-)信息 import psutil 2. IPy 是python 第三方处理IP地址模块 from IPy import IP 3 ...

  10. 常用的Shell实用脚本

    1.检测两台服务器指定目录下的文件的一致性 #!/bin/bash######################################检测两台服务器指定目录下的文件一致性########### ...