A. 你相信引力吗

显然是单调栈处理。

然而优弧/劣弧两种情况,加上高度存在相同,就比较难处理。

然而环是可以平移的,所以一个好的方法是将其中的最大值移到一个端点,

于是跨环端点的情况只出现在 右半部分形成一个单调不降的序列。

顺便去重就可以了。

 

 

 

B. 停不下来的团长奥尔加

打表发现$dp_i=2*dp_{i-1}-dp{f_i-1}+2$

$dp_n$为最终的答案。

将式子拆一下,似乎正确性还挺显然的。

当队长到$i$的时候,前面的点都被经过了偶数次,

所以问题是类似的,可以进行$dp$。

用前缀和来做到直接统计区间的信息。

 

 

 

C. Lesson5!

问题是$DAG$删一个点情况下的最长路。

似乎有一个经典的做法来解决这个问题。

在本题中即最长路径生成树。

删掉一个点$x$意义下的最长路,存在两种情况:

终点不是$x$的子树:预处理出答案,之后可以用$dfs$序,区间维护信息解决。

终点是$x$的子树:那么存在一条路径$a \rightarrow b$,满足$a$不在$x$子树中而$b$在。

预处理出每个点到达终点的最长路径$dis_i$,由超级源点$S$到每个点的最长路径$dep_i$。

即$ans_x$对$dep_a+dis_b+1$取$max$。

枚举边$(a,b)$,可以用树剖来支持取$max$操作。

一个巧妙的做法是提前将所有的$dep_a+dis_b+1$从大到小排序,

所以每个点只需要第一次被更新,之后可以直接跳过。

所以可以用类似并查集的结构维护这个东西。