Skip to content

Commit

Permalink
10.24
Browse files Browse the repository at this point in the history
  • Loading branch information
nalemy committed Oct 24, 2023
1 parent 2b13b12 commit 63cfae7
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
32 changes: 32 additions & 0 deletions source/_posts/CF526G.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
---
title: "[CF526G] Spiders Evil Plan"
categories:
- 题目
date: 2023-10-24 13:29:39
tags:
- 贪心
- 直径
---
给定一棵无根树,在树上选 $k$ 条路径,它们的并构成一个包含 $u$ 的连通块,要使连通块中包含的边的权值和最大。

一道纯粹的性质题。

首先,一棵树能够被 $k$ 条链覆盖,当且仅当它有不超过 $2k$ 个叶子。

这里必要性是显然的,至于充分性,构造任意一种所有叶子都被覆盖,每条边长度至少为 $1$ 的方案,如果树没有被完全覆盖,找出任意一条**极长****没有一条边被覆盖**的非空路径 $p$。显然 $p$ 的端点 $u,v$ 不为叶子,因为端点为叶子,意味着路径 $p$ 包含了叶子的唯一出边;而方案中所有叶子都被覆盖,意味着叶子的唯一连边也被覆盖,这与 $p$ 的要求矛盾。既然 $u,v$ 不为叶子,而 $p$ 极长,那么 $u,v$ 一定分别存在于两条覆盖路径 $s\to t,x\to y$ 上。此时我们调整方案,将这两条路径换成 $s\to x,t\to y$,原来被覆盖的所有边仍然被覆盖,而为被覆盖的路径 $p$ 被覆盖。因此我们不断进行这样的调整,这个过程一定会在有限步内结束。

其次,选择 $k$ 条链,构成的包含边权和最大的子图,一定是连通的。一个不连通的方案,通过上述调整方法可以使其变得连通,并且更优。也即我们只需要保证我们能够考虑到最优方案,并不需要注意我们是否考虑到了不连通的选链方案。

---

不难发现,包含边权和最大的连通块至少包含带权直径的端点中的一个,调整法易得。

鉴于正权树的带权直径的两个端点一定是叶子,问题形式变为,分别在以两个端点为根的树中,选择 $2k-1$ 个叶子,要求它们到根的路径的并形成的连通块包含 $u$,求连通块内边权和最大值。

抛开连通块包含 $u$ 的条件,进行一个简单的贪心——长链剖分(注意这里是划分边集,可能有出现在多个链中,而非像大多数树链剖分一样划分点集),然后选择最长的 $2k-1$ 条链构成该连通块。它的正确性也很显然,最优解必然可以表示为几个长链的并,否则一定存在某个长链,该方案只包含了这个长链的某个真子集,那么此时将这个长链并入该方案,不会使其产生新的叶子,却会使该方案的答案增加。每个长链恰含有一个叶子,也即我们能够选择最多 $2k-1$ 条长链。所以选择长度最长的 $2k-1$ 条长链一定不劣。

如果这样构造出来的方案不包含 $u$ 呢?我们需要做出一些调整。

第一种调整方法是只选长度最长的 $2k-2$ 条链,外加一条根到 $u$,再到 $u$ 子树内深度最大点的路径。

第二种调整方法是将 $u$ 的最近的在连通块内的祖先 $f$,不选 $f$ 以及它所在的长链中 $f$ 以下的部分,而是选择 $f$ 到 $u$,再到 $u$ 子树内深度最大点的路径。
2 changes: 1 addition & 1 deletion source/_posts/Luogu4437.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ tags:
---
首先将原题题意转化为,构造排列 $p$,要求在有根树上如果 $u$ 是 $v$ 的父亲,则 $p_u<p_v$。

最大化 $\sigma p_iw_i$ 的值。
最大化 $\sum p_iw_i$ 的值。

从极端情况入手,考察树上权值最小的非根点 $u$,不难发现它在排列上紧随其父亲 $f$ 之后(即 $p_u=p_f+1$)一定不劣。于是我们便可以将 $f$ 和 $u$ 作为一个连续段考察。具体来说是将两个权值放进一个节点中,新节点的儿子为 $u$ 的所有儿子和 $f$ 除了 $u$ 之外的儿子,新节点的父亲为 $f$ 的父亲。

Expand Down

0 comments on commit 63cfae7

Please sign in to comment.