首页 > 其他分享 >【题解】AGC008F | 思维 统计技巧 换根 二次扫描

【题解】AGC008F | 思维 统计技巧 换根 二次扫描

时间:2024-04-03 13:47:27浏览次数:23  
标签:AGC008F 中心 题解 邻域 点集 方向 全集 换根 统计

题意:给出一个 \(n\) 个点的树(边权为 \(1\))和集合 \(S\),求有多少个点集 \(T\) 可以被表示为离 \(S\) 中的一个点 \(u\) 距离不超过 \(d\) 的点构成的集合(下文称为 \(u\) 的 \(d\) 级邻域)。

考虑 \(S\) 为所有点的特殊情况:

我们直接求每个点邻域的个数再求和,会算重一些点集,这种情况发生仅当这个邻域在某些方向“满了”,从而可以认为是向没满的方向移动一些并把这个点当作邻域的中心。

如下图中的黑色点集既可以表示为 \(v\) 的 \(3\) 级邻域也可以表示为 \(u\) 的 \(2\) 级邻域。


于是我们考虑在点集的“中心”,即邻域的 \(d\) 最小时统计,容易发现对于所有不是全集的某个邻域,都存在唯一的一个点 \(u\) 使得邻域的 \(d\) 最小(尽可能不溢出),于是我们单独统计全集,接下来考虑枚举一个点并统计它作为中心的邻域。

令 \(f_u\) 表示 \(u\) 在树上最远点的距离,\(g_u\) 表示次远点的距离,容易换根求出 \(f_u,g_u\)。

首先 \(d\) 不能取 \(\geq f_u\) 的值,因为我们现在只统计不是全集的集合。

接下来考虑 \(u\) 是中心的条件:不能存在某个相邻的 \(v\) 使得 \(v\) 的 \(d-1\) 级领域和 \(u\) 的 \(d\) 级领域相同,可以发现这种情况仅当除了 \(v\) 方向的其它方向的子树内都是满的,显然 \(v\) 只能在 \(f_u\) 所在子树的方向,且其它方向最远距离的点的距离都 \(\leq d-2\)。(在 \(v\) 处 \(d-1\) 也能统计到)于是我们得到 \(d\) 不能取 \(\geq g_u+2\) 的值。

则 \(u\) 可以选择的 \(d\) 在 \([0,\min(f_u-1,g_u+1)]\) 任意取,对所有值求和后加上全集即可。


接下来并不是所有点都可以选了,但我们仍然考虑在邻域邻域的中心 \(u\) 处统计答案,即使这个中心并不能选择(我们统计的其它某个可以选的 \(v\) 的 \(d_1\) 级邻域但因为溢出而以 \(u\) 为中心)。

若 \(u\) 可以选择,则它作为中心的情况和上面相同。

若 \(u\) 不能选择,则需要 \(u\) 某个方向的一个可选择的 \(v\),填满它的子树并从 \(u\) 向外延伸向其它方向。

我们把 \(u\) 当作中心的话,需要这个 \(v\) 所在的子树被填满(这样才能使中心向 \(u\) 偏移,否则中心显然不能是 \(u\)),并向外蔓延的距离至少要比这个子树的深度大,才可以把 \(u\) 当作中心。

所以考虑 \(d\) 能够取的最小值,即所有存在可以选择的点 的子树中,最深点深度的最小值,称为 \(h_u\),通过换根求出即可,那么这个点可取的区间即 \([h_u,\min(f_u-1,g_u+1)]\),对所有点求和再加上全集即可。


其实最开始解决这个问题时,我采用的办法是树定一个根,然后对于每个点集在可行的最靠上的 \(u\) 的邻域统计。

在解决 \(S\) 为所有点的情况时还可以用类似的办法解决(在钦定邻域中心不能上移的位置统计),但是无法拓展到 \(S\) 不是全集的情况。

这启示我们在统计无根树问题的时候,最好还是采用更加「无根」的统计方式,比如“中心”、“重心”、“最近”之类的,而不是“公共祖先”、“最上方”之类的有根树方向。


标签:AGC008F,中心,题解,邻域,点集,方向,全集,换根,统计
From: https://www.cnblogs.com/Dreamerkk/p/18112488

相关文章

  • 【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)
    [蓝桥杯2019国AC]轨道炮题目描述小明在玩一款战争游戏。地图上一共有NNN个敌方单位,可以看作2D平面上的点。其中第i......
  • 【洛谷 P8672】[蓝桥杯 2018 国 C] 交换次数 题解(字符串+映射+全排列)
    [蓝桥杯2018国C]交换次数题目描述IT产业人才需求节节攀升。业内巨头百度、阿里巴巴、腾讯(简称BAT)在某海滩进行招聘活动。招聘部门一字排开。由于是自由抢占席位,三大公司的席位随机交错在一起,形如:ABABTATT,这使得应聘者十分别扭。于是,管理部门要求招聘方进行必要的......
  • 【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)
    [蓝桥杯2019国B]解谜游戏题目背景题目描述小明正在玩一款解谜游戏。谜题由242424根塑料棒组成,其中黄色塑料棒4......
  • 记录一次解决跨域问题解决过程。 strict-origin-when-cross-origin,net::ERR_FAILED, No
    事情是这样的,vue项目本地启动可以正常连接后端端口访问,部署到nginx上只有就无法访问,显示跨域问题  于是查看后端日志 啥都没有,觉得肯定是nginx的问题,怎么配置都没用, location/{ roothtml; indexindex.htmlindex.htm; add_header'Access-Control-Allow-O......
  • P3622 [APIO2007] 动物园 -题解
    好写爱写没事干所以有了这篇题解洛谷P3622[APIO2007]动物园题解$Link$hzoi题库洛谷题目说的挺繁琐,其实就传达了一个很简单的信息:\(n\)个动物,\(c\)个小孩,每个小孩能看到\(5\)个动物(所在的位置)\(E\)到\(E+4\),有\(F\)个害怕的动物,\(L\)个喜欢的动物。如果视野中有至......
  • 题解:P3903 导弹拦截III
    第一步:确定子任务因为当前拦截的导弹可能在奇数位上,也可能在偶数位上,所以以这两种状态为子任务。第二步:确定状态设$dp[i][0/1]$为作为第(偶数/奇数)个被拦截的导弹,最大可以拦截多少个导弹第三步:推出转移方程$dp[i][0]=max(dp[j][1])+1(1\lej<i且h[i]<h[j])$$dp[i][1]=max(......
  • 题解:P2758 编辑距离
    第一步:确定子问题有4种操作(删除,添加,修改,不变)。所以4个子问题就是操作后的A变为B需要多少步。第二步:确定状态设$dp[i][j]$为将A的前i位变为B的前j位的最小代价。第三步:确定转移方程删除:$dp[i][j]=dp[i-1][j]+1$添加:$dp[i][j]=dp[i][j-1]+1$修改:$dp[i][j]=dp[i-1][j......
  • AGC066 题解
    题解:AT_agc066_a[AGC066A]AdjacentDifference笑点解析:没有必要将总成本最小化。我们将格子间隔的黑白染色(显然有两种染色方法),对于黑点我们要求它是奇数倍\(d\),对于白点我们要求它是偶数倍\(d\),这样一定满足相邻格子相差至少\(d\)。因为两种染色方法的代价和为\(dN^2\),......
  • [ABC259F] Select Edges 题解
    很容易想到树形dp。考虑在有根树内,每个点都有两种状态:不选自己和父亲的边;要选自己和父亲的边。那么单独对于子树内部而言,就要分两种情况:最多可以向\(d_i\)个孩子连边,对应上述第一种情况,我们称之为\(f_i\);最多可以向\(d_i-1\)个孩子连边,对应上述第二种情况,我们称之......
  • ABC347G 题题解
    还算是比较经典了。首先我们注意到一个性质:\(1+3+\cdots+n=n^2\)。所以我们可以把平方拆开。然后容易证明\(a_{i,j}\)填\(1\)一定比填\(0\)不劣。我们可以把\(a_{i,j}\)拆成\(4\)个点,然后我们想到了最小割。构造网络:\(a_{i,j,x}\leftarrowa_{i,......