首页 > 其他分享 >P9352 题解

P9352 题解

时间:2023-07-21 17:22:42浏览次数:29  
标签:子树 题解 pos P9352 枚举 DP dp

problem & blog

HerryHuang 的 DP 专题中最喜欢的一题,抢第一篇题解 /fendou。

关于题意:只有往猫那里扔路障,猫才会动,否则只会原地坐牢。猫如果要走动,是一下子走到最高点,而不是慢慢挪动。


假设猫在 \(u\) 点。现在往 \(u\) 扔路障,猫会跑去最高点,然后他无法返回到 \(u\) 的其他子树了,因为 \(u\) 被堵上了。

实际上,每次只给猫留一条活路,猫的行动点就是固定的。那么只需找到子树中能移动的次数最大的子树,然后过去即可。

显然可以 DP。设 \(dp_u\) 表示以 \(u\) 为根的子树中,猫在 \(u\) 点,可以走的最长距离。令子树中点权最大的点是 \(pos_u\),那么 \(dp_u=\max\{dp_{pos_v}+\operatorname{dist}(u,v)\}\)。

但有一个潜在条件是 \(a_u>a_{pos_v}\),我们又要先枚举小再枚举大。这意味着 DP 顺序会跳来跳去,直接失去了正确性。

考虑连边 \((a_u,a_v)\)。那么顺着枚举 \(u\) 就是正确的。\(pos_u\) 就是并查集了,直接做就可以了!

代码,时间复杂度 \(O(n\log n)\)。

标签:子树,题解,pos,P9352,枚举,DP,dp
From: https://www.cnblogs.com/liangbowen/p/17571984.html

相关文章

  • SP12304 题解
    原题链接|题解链接本篇题解为此题最较简单做法及最较少码量,并且码风优良,请放心阅读。题目简述当\(i\)的所有正因数和\(=\)\(n\)时,其中\(i\)的最小值。思路首先需要完成求一个数的所有正因数之和的函数\(f(n)\)。要求此函数可返回传入参数的所有正因数之和,那么......
  • 【补充】时间出错问题解决
    【补充】时间出错问题解决TIME_ZONE='Asia/Shanghai'和USE_TZ=False是Django项目设置中的两个相关选项用于指定项目的时区和是否使用时区。【一】TIME_ZONE='Asia/Shanghai'这个设置用于指定项目所在的时区。在这个例子中,时区被设置为'Asia/Shanghai'表示项目位于......
  • P4843题解
    P4843题解原题连接建模一到比较裸的有源汇上下界最小流。每条边必走一次,要求求出最小的流量。由于比较裸,这里当作上下界流的例题讲。什么是有源汇上下界最小流顾名思义,就是在最大流的基础上增加了边的最小经过流量,使得整个网络可行,并且找出最小流量的方案。一个比较朴实的......
  • 列队春游题解 O(n方)
    题目前言出生镇楼思路:打个暴力先#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;namespaceTestify{inlineintread(){intf(1),x(0);charch=getchar();for(;!isdigit(ch);ch=getchar())if(ch=='-')f=-......
  • 【求助+半题解】BZOJ1461字符串的匹配
    先说思路:因为我们是比对较短的\(B\)与较长的\(A\)的子串,所以我们求不变的\(B\)的\(next\)对于这道题我们可以使用树状数组查询前缀和维护数的排名。对于相同的数我们查询的排名是有误的,因此不仅要比对小于等于该数的前缀和,也要比对小于该数的前缀和。如:对于\(A=2\)\(2\),\(B......
  • claude初步体验1(含个人遇到各种注册问题解决)
    很久之前体验的了,当记录一下吧(于三月)https://www.anthropic.com/claude-in-slack 若出现下面这个,而且你用了魔法还不行,大概率是你之前登录别的工作区,然后被检测出来不在他支持的地区了,然后官方把你禁用了,禁止你IP访问(我之前就是这样子),就是你的源IP,用魔法也不行。解决方法,重启......
  • LG4868 Preprefix sum 题解
    壹、题目大意给出长度为\(n\)的序列\(a_1\sima_n\),设\(S_i=\sum\limits_{j=1}^ia_j\),有两种操作可以给定\(i\)和\(x\),使得\(a_i=x\),也可以给定\(i\),查询\(\sum\limits_{j=1}^iS_j\)的值\(n\le100000\)贰、思路这道题查询的是\(S\),但实际上是\(a\),而操......
  • 题解 POJ3318【Matrix Multiplication】
    postedon2022-10-2119:56:08|under题解|sourceproblem判断三个\(n\timesn\)的矩阵是否满足\(A\timesB=C\),\(n\leq500\)。solution随机一个行向量\(v\)。若\(a\timesb=c\),则有\(v\timesa\timesb=v\timesc\)(不充分)。显然相乘复杂度仅为\(O(n^2)\)。类似于......
  • 题解 P4955 【[USACO14JAN]Cross Country Skiing S】
    postedon2021-02-2710:04:32|under题解|source这道题其实没有绿这么难,只需要二分+搜索就行了。读入。注意尽量不要用scanf读入bool,这好像是UB,可以用一个变量\(x\)存输入的数,然后直接类型转换。二分。套模版就行了,等一下我们再写\(\operatorname{check}()\)函......
  • CF1152F2 Neko Rules the Catniverse (Large Version) 题解
    发现挨位考虑填哪个不太现实,考虑值域。令\(dp_{i,j,st}\)表示考虑到\(i\),此时序列长度为\(j\),\(i-m\)到\(i-1\)填空状态为\(st\)的方案数,考虑选/不选数即可:\(dp_{i,j,st}\times(\text{popcount}(st)+1)\todp_{i+1,j+1,(2st+1)\&2^m},dp_{i+1,j,(2st)\&2^m}\)乘上那......