Gravatar
LikableP
积分:1988
提交:427 / 1121

题意简述

给定 $n$ 个非负整数 $x_1,x_2,\dots,x_n$。

对于任意 $n$ 个节点的无向连通图 $G$,将其节点由 $1$ 至 $n$ 标号,则其分数定义为 $$\text{score}(G) = \sum_{i=1}^n \sum_{j=i+1}^n \text{dist}_G(i, j)x_ix_j,$$ 其中 $\text{dist}_G(i,j)$ 表示图 $G$ 上 $i$ 到 $j$ 的最短路径长度。

你的任务是输出所有 $n$ 个节点的无向连通图中分数的最大值。

$1 \le n \le 300$,$0 \le x_i \le 2000$

解法

我们首先假设至少有两个 $x_i$ 不为 $0$,否则答案一定是 $0$。

定理 1:一定存在一棵树取到最大分数。

不是一棵树的 $G$ 删掉一条不改变连通性的边肯定会让 $\text{dist}_G(i,j)$ 变大,所以这个定理是显然的。不过只知道 $G$ 是一棵树还不足以解决本问题。

定理 2:一定存在一条链取到最大分数。

假设分数最大的 $G$ 是一棵树但不是一条链。以任一度数大于等于 $3$ 的点 $r$ 为根。不妨假设其度数为 $3$,三个子树为 $A,B,C$,子树根分别 $a,b,c$,子树的 $x$ 的和分别为 $x_A,x_B,x_C$。假设 $x_A \le x_B \le x_C$。

考察如下调整:删去 $(r,b)$ 加上 $(a,b)$。此时从 $C$ 和 $r$ 到达 $B$ 的距离增加 $1$(多经过 $a$),从 $A$ 到达 $B$ 的距离减少 $1$(少经过 $r$),其他距离均不变。

因此图的分数变化为 $(x_r+x_C-x_A)x_B$。当这个值大于 $0$ 的时候,我们就可以得到一个分数更大的方案,矛盾。

若 $(x_r+x_C-x_A)x_B = 0$,有两种情况:

  • $x_B = 0$,此时子树 $B$ 里的所有点 $p$ 都有 $x_p = 0$。将这些点插入到任意两个 $x$ 不为 $0$ 的点 $a, b$ 的路径中(注意我们假设了至少有两个 $x$ 不为 0),这样一定会让分数变大。
  • $x_A=x_B=x_C$ 且 $x_r=0$。此时我们尝试进行调整以最大化第二个目标 $\text{score}^\star(G) = \sum_i \sum_{j > i} \text{dist}_G(i,j)$。注意到这个就是所有 $x$ 都是 $1$ 的版本所以一定可以进行调整,而这样调整一定不改变 $\text{score}(G)$。

因此每次调整要么会提升 $\text{score}(G)$,要么 $\text{score}(G)$ 不变的同时 $\text{score}^\star(G)$ 增加,而两者均为正整数且有上界。故不断进行调整后必然到达一个 $(\text{score}(G), \text{score}^\star(G))$ 的局部最大值,此时无法进行以上调整,也就是不存在度数大于等于 $3$ 的点。证毕。


运用以上定理,我们此时的任务是把 $x$ 重排为 $x'$,最大化 $\sum_i \sum_{j>i} (j-i)x_ix_j$。

我们还需要以下有关这个问题的解的性质。

定理 3:一定存在一个单谷的重排 $x^\star$ 达到最大分数。

不妨假设 $x$ 两两不同且大于 $0$,这可以通过给每个数加上一些微小扰动完成。

若最优的重排 $x^\star$ 不是单谷的,则存在 $p$ 满足 $x^\star_{p-1} < x^\star_p>x^\star_{p+1}$。考虑两种调整:

  • $\text{swap}(x^\star_{p-1},x^\star_p)$,分数增加 $(x^\star_p - x^\star_{p-1})(x_{p+1 \sim n} - x_{1 \sim p-2})$;
  • $\text{swap}(x^\star_{p+1},x^\star_p)$,分数增加 $(x^\star_p - x^\star_{p+1})(x_{1 \sim p-1} - x_{p+2 \sim n})$

注意到两个增量的第一项都是正的,而两个第二项的和为 $x_{p-1}+x_{p+1}$ 也是正的,因此必然存在一个调整增大分数。证毕。


最后我们把分数式子稍微变换一下。

$$\begin{align*} \sum_i \sum_{j>i} (j-i)x_ix_j & = \sum_i \sum_{j>i} \sum_{k=i}^{j-1} x_ix_j \\ = & \sum_k \sum_{i \le k} \sum_{j > k} x_ix_j \\ = & \sum_k x_{1 \sim k} \times x_{k+1\sim n}, \end{align*}$$

也就是说分数等于每个位置的前缀和和后缀和的乘积的和。

由于最优解是单谷的,考虑从大到小依次加入每个 $x_i$,此时每个 $x_i$ 一定加在未加入的部分的第一个或最后一个。加入进去之后,可以确定一个前缀和(加在后面是确定后缀和,其实也就是确定了剩余位置的前缀和),也就确定了分数中一项的贡献。

因为分数只关心每个位置的前缀和是多少,依此设计 DP:设 $f_{i,j}$ 表示加入了前 $i$ 大数,加在前面的所有数的和为 $j$ 时分数的最大值。加在后面的数的和可以直接通过 $i$ 和 $j$ 推导出来。转移枚举第 $i+1$ 大数放在前面还是后面,加上对应项的贡献即可。

复杂度 $O(n^2 \max x_i)$。


Gravatar
LikableP
积分:1988
提交:427 / 1121

简要题意

给定正整数 $n$,构造一个 $1$ 至 $n$ 的排列 $p_1,p_2,\dots,p_n$ 满足以下条件:

  • 对于 $1 \le i \le n$,设 $c_i = \lceil \frac{p_1+p_2+\dots +p_i}{i} \rceil$,则在 $c_1,c_2,\dots,c_n$ 中至少有 $\lfloor \frac{n}{2} \rfloor$ 个质数。

$n \le 10^4$

解法

本题有很多(乱搞)解法,这里给出一个可以严格证明的做法。

考虑将 $c$ 的一个前缀都赋值成相同的质数。这可以通过取一个质数 $p$ 并将前缀排列成 $p, p-1, p+1, p-2, p+2, \dots$,这样长度为 $2\min(p, n-p+1)-1$ 的前缀的 $c$ 值都是 $p$。

根据 Bertrand's Postulate,对于任意整数 $x$,$[x,2x]$ 内至少存在一个质数。

取其中的任意一个质数,长度 $\left(2\lfloor \frac{n}{3}\rfloor-1 \right)$ 的前缀就都是质数了。


Gravatar
遥时_彼方
积分:699
提交:130 / 422

题目要求共有 $n$ 个结点,将其中 $k$ 个点染成黑色(本题解中为了方便描述,通称所有未染色的点为白点),求黑点两两距离及白点两两距离,使他们之和最大。

我们可以将距离转化为路径,然后再将路径拆分成边,就可以记录每条边被经过的次数,直接计算即可。

问题来了!:那么每条边会对答案贡献多少呢?

我们不妨设这条边的一侧共有 $w$ 个点,其中有 $t$ 个点被染成黑色了;

那么这一侧共有 $t$ 个黑点,($w-t$)个白点;类似,另一侧有($k-t$)个黑点,($n-w-k+t$)个白点;

令 $sz$ 为这条边的边权,那么贡献就是 $val=sz*(t*(k-t)+(w-t)*(n-w-k+t))$;

解题的大致思路就是计算每条边对答案的贡献,最后利用状态转移方程求出最优解。

首先给出状态数组:$f[x][y]$;

$f[x][y]$ 表示给以 $x$ 为根结点的子树染上 $y$ 个点所得的对于整棵树的最大贡献;


方程如下:

$f[i][j]=max(f[i][j],f[i][j-t]+f[z][t]+val);$( $z$ 表示 $i$ 的子结点)

目标状态:$f[1][k]$;

PS:中间可能遇到非法情况,建议把 $f[x][y]$ 预处理成非法情况,方便跳过处理(代码最后有针对这点的样例,可自行调试);

强烈建议参考代码理解!!!!!

Over.

(第一次写题解,不足之处请大家多多包涵》_《)



题目1962  [HAOI 2015]树上染色 AAAAAAAAAA      6      评论
2026-01-29 18:24:47    
Gravatar
hsl_beat
积分:287
提交:46 / 66

题意

$n$ 只猫娘,每只猫娘每天要么自己举行了排队,要么会追随自己最好的朋友去参加她要去的派对。


举办的派对有 $3$ 种类型,在每一天晚上都会有一只猫娘举办了某种类型的派对,这只猫娘会一直举行下去直到自己换类型,问每天晚上这三种类型的派对都几只猫娘参加。


思路

首先把猫 $i$ 与自己的朋友连一条有向边,那么整张图就是一个内向基环树。每当一只猫娘举行了派对,这个结点相当于把自己和父亲结点的连边断开了,我们就需要统计每个举办派对的结点子树大小。


如果我们直接对着每一天的修改一个一个做,那么要处理分裂的问题,也能做但是不是很好写,所以我们考虑倒着做。


具体来说,每一天把当前猫娘举办的派对的答案回溯到这只猫娘举办的上一个派对那里(因为这只猫娘从上一个派对到举行当前派对这段时间一直都没变),但是如果这是这只猫娘举办的第一个派对了,那么来她排队里的猫娘和她自己都会跟随她的父亲结点,相当于连上了一条边,可以直接用dsu做,假如当前父亲节点追随的结点举办了派对,那么我们需要把当前结点子树的大小统计进这个派对的类型中。


差点忘了,我们既然从后往前做了,那需要初始化每种类型在最后时刻的人数,可以直接把一直都没举行派对的猫娘直接和她们的父亲节点连起来,然后对于有派对的把对应类型类加上自己子树的大小,然后从后往前一步一步更新当前答案这题做完了。


有一个注意的点在于并查集合并方向要写对,不然只能得 $4$ pts(也可能是我写法问题)。


这题洛谷评蓝是不是太夸张了(


题目4257  [USACO26 JAN G]COW Traversals AAAAAAAAAAAAAAAAAAAAA      1      评论
2026-01-25 22:13:33    
Gravatar
HXF
积分:7135
提交:1307 / 2761

  通常的染色问题是NPC问题,但此题多了m−n<=5的限制,可以将图的大小缩小来解决。将问题拓展为:每条边有两个权值,分别表示两个点同色、不同色时的权值,而一张图染色后的权值就是每条边的权值之积。这样对应原问题时,每条边同色时的权值为0,异色时的权值为1。拓展后的问题可以进行“消点”操作,具体如下:

  • 度数为1的点可以直接删除,并在最终的答案上乘上k−1.

  • 对于度数为2的点,设这个点连向a和b,则可以删除这个点并在a和b之间连一条边,讨论这个点的颜色来决定这个点的权值。具体如下:

    – 如果a和b同色,则有一种情况是这个点与a与b均同色,k−1种情况是这个点与a与b均不同色;

    – 如果a和b不同色,则有k−2种情况是这个点与a与b均不同色,一种情况与a同色,一种情况与b同色。

根据以上规则即可算出新连的边的权值,使得新图与原图等价。

  新图中不会包含度数小于等于2的点,因此新图中的点数n与边数m满足3n≤2m,又因为m−n≤5,所以n≤10且m≤15.

  随后用状态压缩dp进行子集转移即可在O(nm3^n) 的时间内求出新图的权值。


题目4253  染色问题      3      1 条 评论
2026-01-17 14:02:42    
Gravatar
HXF
积分:7135
提交:1307 / 2761


题目3125  《数列》      2      1 条 评论
2026-01-17 13:58:12