ABC309CDE题解-Jasmine

Jasmine 2023-07-11 11:23:38 2023-07-11 11:25:30 6

ABC309CDE题解


C:统计一开始每天所需吃的药片数,将每种药按照吃的天数排序。

按照排序后的顺序减去药片数,记录当前枚举到的天数和目前所需吃的药片数。

药片数小于等于k时弹出循环,输出。

*cmp函数不要用<=或>=


D:原先有两个连通块,添加一条边并不影响两个连通块内部的最短路。

=》考虑分别找出两个连通块的最大最短路,即对于每个连通块,算出初始点到每个点的最短路后找出最大的两个点。 将两个最大点的值相加再加1得到ans。

因为边权为1所以直接bfs。

*第二个连通块的初始点是n1+n2


E:考虑按照父子关系构建一棵树。在这里因为所有的保险是向下覆盖的,因此存储每个节点的son。

由于每次购买保险后就进行树的覆盖会tle,因此考虑将每个节点的保险数做上标记,在打完标记后统一遍历树。对于每个标记,取最大值。

遍历树时,下传标记为当前[max(父节点传来的标记,本身标记) - 1]。

*保险输入时第二个参数是指覆盖下面的代数,要加1(加上本身)

*标记只用来判断是否需要ans++,无论如何整棵树都需要被遍历一次,因此不能写tag!=0才往下执行

{{ vote && vote.total.up }}