YACS 11 月甲题解
这把还是简单的,难度对标普及组。
所有题解均口胡。
T1
观察 & 性质
-
你扫左端点,然后维护以当前左端点最长的合法子段,显然右端点单不降,因为当你左指针右移时,显然少了一个数,然后你可以求出以每个位置为左端点的最长合法子段的长度。
-
考虑区间限制左右端点,且你有每个右端点单不降的性质,因此你只需要找到一个点,使得它及其它之后的最长合法区间都跨过 \(r\),这一部分的贡献很好计算。然后前面的都没跨过,取长度最大值即可。
T2
考虑序列中仅有 2 个字符时的做法。即将对两个各赋权 \(1,-1\),定义一个区间的权值为和的绝对值,求所有区间的最大权值即可。
考虑多个字符,我们钦定 2 个是否正确。
考虑一个序列,但我们没有钦定到其最大,最小,此时算出来的答案不优于钦定到的。
考虑答案序列,我们一定能钦定的到。
所以一定正确。
T3
先考虑缩点后构成 DAG,假如没有逆行的条件的话,显然为 DAG 上带权最长链。
考虑逆行的边一定不会用在强连通分量内(因为你能走完啊。。)
考虑枚举逆行边,\((u,v)\),则其变为双向边。
则现在变成 \(u\) 所在的最长带权链(不经过 \(v\))加上 \(v\) 的权值。
因为你一条链不能走回头路,所以你一定是先走到 \(v\) 然后再走回去最长链的。
需要注意没有逆行边,即原先的最长带权链也要贡献答案。