20联赛集训day12 题解
A一个暴力的想法是找出这条链,暴力跳。跳的定义是走到第一个满足和 $\geq k$ 的位置。于是可以想到用倍增。设 $f_{x,i}$ 表示 $x$ 点跳 $2^i$ 步在哪个点,首先跳 $2^0$ 步可以二分预处理,然后直接转移就好了。但是这只能处理往上的,往下怎么做呢?一种方法是直接树链剖分,就变成了若干个链的问题,但是这是 $O(\log^2n)$ 的,又难写又难调。我们可以观察到对于...
A一个暴力的想法是找出这条链,暴力跳。跳的定义是走到第一个满足和 $\geq k$ 的位置。于是可以想到用倍增。设 $f_{x,i}$ 表示 $x$ 点跳 $2^i$ 步在哪个点,首先跳 $2^0$ 步可以二分预处理,然后直接转移就好了。但是这只能处理往上的,往下怎么做呢?一种方法是直接树链剖分,就变成了若干个链的问题,但是这是 $O(\log^2n)$ 的,又难写又难调。我们可以观察到对于...
A据说是抄重了。。B首先肯定二分答案,设二分的答案为 $x$,最终的权值是 $B$,设一对相邻的点为 $(i,j),(k,l)$,那么一定要满足 $|B_{i,j}-B_{k,l}| \leq x$。可以把绝对值拆开,于是就是 $B_{i,j}-B_{k,l} \leq x$,也就是 $B_{k,l} \geq B_{i,j}-x$(因为这个题要增加,所以我们就搞出下界)显然的贪心是让每个点...
A我考试的做法是贪心:首先这个题目等价于要求回到根(可以传送),那么如果没有传送操作,答案就是按照 $dfn$ 序走,有了传送只需要在每一步判下是传送回去再走过来优还是直接走优了。注意这样我们要先遍历深度最大值比较小的点,这样就能在最后传送回去,不会浪费。题解的做法是dp。对于这种树上游走的题目我们可以设 $f_{v,0}$ 表示从 $v$ 出发,走完子树,不用回到 $v$ 的代价。$f_{...
A. Slay the Spire考虑最优的操作是什么:由于强化牌都 $>1$,所以我们肯定是先尽量用强化牌,最后一次用攻击牌。将两种牌分别从大到小排序,可以分别 dp:设 $f_{i,j,0/1}$ 表示考虑前 $i$ 张牌强化牌,选了 $j$ 张,是否选择第 $i$ 张的所有方案的和(每种方案的权值是乘积),$g_{i,j,0/1}$ 考虑攻击牌,这里方案的权值就是和了。转移比较显...
A对点权取 $\ln$ 变成加法就行了。#include <bits/stdc++.h> #define fi first #define se second #define db double #define U unsigned #define P std::pair<int,int> #define LL long long #define pb push_b...