首页 > 其他分享 >P8314 Parkovi 题解

P8314 Parkovi 题解

时间:2024-07-29 21:28:44浏览次数:17  
标签:Parkovi P8314 题解 最大值 mn 距离 染色 inf mx

题意:树,边有边权,求一种选出 \(k\) 个点染色的方案,使得每个点到最近的一个被染色点的距离的最大值最小,\(n\le2\cdot10^5\).

Solution

先看部分分:

  • \(n\le 20\):直接 \(C_n^k\) 爆搜.
  • \(k=1\):对每个点 \(u\) 求出 \(f(u)\) 和 \(g(u)\) 分别表示 \(u\) 到子树内点距离的最大值、\(u\) 到子树外点距离的最大值. 这是可以转移的:\(f(u)\) 从儿子转移而来,\(g(u)\) 从父亲的 \(g\) 和兄弟的 \(f+w(v,fa(v))\) 的前后缀最大值得到.
  • 链:二分答案,发现 check 直接贪心地染色即可.

我们从链的部分分类似地推广,考虑树能不能贪心地染色. 感受一下,发现其实是可以的!策略大概是我们想要染色点尽量靠上。

具体地说,我们二分 \(x\) 表示最大距离为 \(x\),定义 \(u\) 被已经染色的 \(v\) “覆盖”当且仅当它们距离 \(\le x\),问题变成了选最少的点染色使得整棵树被覆盖.

考虑自底向上地贪心染色,每次想要一棵子树被覆盖. 记 \(mx(u)\) 为 \(u\) 子树内未被覆盖的点与 \(u\) 距离的最大值,\(u\) 必须染色的条件大概就是 \(mx(u)\le x\) 且 \(mx(u)+w(u,fa(u))>x\),现在问题变成了维护 \(mx(u)\).

\(mx(u)\) 可以从儿子得到,于是一个简单的想法是 \(mx(u)=\max_{v\in son(u)}\{mx(v)+w(u,v)\}\). 但是有个 bug:可能 \(u\) 子树中的点被 \(u\) 兄弟子树中的染色点所覆盖!

发现这也是好修的:再记 \(mn(u)\) 为 \(u\) 子树内距离 \(u\) 最近的染色点的距离,显然 \(mn\) 可以转移,而 \(mx\) 再加个关于 \(mn\) 的条件就行了.


上面是思路,下面是具体式子与细节:

\[ mx(u)=\max_{v\in son(u)\land mn(u)+w(u,v)+mx(v)>x}\{ mx(v)+w(u,v) \}\\ mn(u)=\min_{v\in son(u)}\{ mn(v)+w(u,v) \} \]

\(u\) 被染色的条件:\(mx(u)+w(u,fa(u))>x\)

\(u\) 被染色时,\(mx(u)=-\inf,mn(u)=0\)

注意初始 \(mx=-\inf,mn=\inf\)

特判:根的 \(mn\) 不为 \(\inf\) 时必须得染色.

最后输出答案时,若点数不足 \(k\),就再随便乱选几个点凑足 \(k\) 即可.

时间:\(O(n\log V)\),\(V\) 为值域(1e9)

标签:Parkovi,P8314,题解,最大值,mn,距离,染色,inf,mx
From: https://www.cnblogs.com/laijinyi/p/18331129

相关文章

  • luogu P2371 [国家集训队] 墨墨的等式 题解
    luoguP2371[国家集训队]墨墨的等式题目传送门思路同余最短路同余最短路同余最短路与差分约束有异曲同工之妙,都将约束条件转化为边,每种状态转化为点。把本来与图论毫不相干的问题抽象到具体的图上,通过拓扑排序,最短路等基础算法获得最小状态,从而解决问题。在本题中,以\(0\)......
  • vue3中使用keepAlive缓存路由组件不生效的问题解决
    在Vue3中使用keep-alive缓存路由组件时,可能会遇到一些问题导致缓存不生效。以下是一些常见的问题及其解决方案:keep-alive写法错误:在Vue3中,使用keep-alive需要将router-view包裹在keep-alive中,并通过插槽传递组件。例如:<template><router-viewv-slot="{Co......
  • CF1523D Love-Hate 题解
    CF1523DLove-Hate题解传送门题目大意:给定\(m\)和\(n\)个集合,而且这\(n\)个集合的元素都是\(1\)~\(m\)中的数且没有重复,而且大小都不超过\(15\)。求一个最大的集合,使得这个集合是至少\(\left\lceil\frac{n}{2}\right\rceil\)个集合的子集。先想一个问题:题目是让......
  • CF1523E Crypto Lights 题解
    CF1523ECryptoLights题解传送门。题目大意:有\(n\)个台灯,初始时都是暗的,每次随机点亮一个暗台灯,若点亮后存在一个长度为\(k\)的连续段有大于一个台灯被点亮则立刻停止,求期望点亮多少台灯。(就是直接把原题翻译搬过来了)很明显的期望dp,状态定义也很明显,设\(f_i\)表示......
  • P8347 「Wdoi-6」另一侧的月 题解
    P8347「Wdoi-6」另一侧的月题解第一次自己思考出来紫题,题解纪念一下。下面为大家讲解如何一步步推到最终结论:首先,原树没有根,不妨设它的根为\(1\),将它转化成有根的,便于操作。为了方便描述,我们称将一个非根节点的点的父亲删去,保留含这个点的连通块这个操作为截取操作(就是......
  • CF538G Berserk Robot 题解
    Description有一个机器人,第\(0\)秒时在\((0,0)\)位置。机器人会循环执行一个长度为\(l\)的指令序列,每秒执行一个指令。指令有ULDR四种,分别代表向上/左/下/右移动一格。你不知道这个指令序列具体是什么,但是你知道\(n\)条信息,第\(i\)条信息为「第\(t_i\)秒时机器......
  • CF1634F Fibonacci Additions 题解
    CF1634FFibonacciAdditions题解传送门。题目大意:给定两个序列\(A\)和\(B\),每次一个可以选一个区间,并在区间的第\(i\)个数加上\(F_i\),其中\(F\)是斐波那契数列,你需要在每次询问结束时输出两个序列是否相等。可以先求一个序列\(C\)表示\(A\)和\(B\)每个位置的......
  • 剑指Offer题解合集
    剑指Offer题单及题解题目顺序为牛客上剑指Offer专题JZ3、数组中重复的数字分析可以直接对数组进行排序,通过判断首末数字大小来判断数字越界情况,注意数组为空的情况。发现\(0\leqnums[i]\leqn-1\),因此直接开一个数组判断是否有重复数字即可,返回第一个重复数字。代码......
  • 力扣题解2-两数相加
    问题的描述如下:分析过程:为了解决这个问题,我们需要逐位相加两个链表对应位置的值,并处理进位问题。具体步骤如下:初始化一个新的链表,用于存储结果。使用两个指针遍历两个输入链表,逐位相加,同时考虑进位。如果一个链表比另一个短,则将其视为0进行计算。处理最后可能存在的进位......
  • curl发送get和post请求时遇到&截断的问题解决
    get的parameter里带&被截断处理第一种是双引号括住 第二种是加反斜杠转义 post请求的body里有参数的value带了&curl-XPOSThttp://qa-ci.fuxi.netease.com:36800/job/xxxxx/xxxx--userxxxx:xxxxx-d token=popo -d"msg=cd/ssd/deployment_bash&&bashkill.b......