JOI Open 2020 做题记录
T1 「JOI Open 2020」家具摆放
菜鸡拿到题毫无思路,看了下std一下就懂了
首先我们考虑把一些没有用的点等效成家具,即这个点向下和向右都只能走到家具,或者是这个点上面和左面都是家具
这个可以利用bfs实现
那么我们考虑斜线\(x+y=k\)上的一个点\((x_0,y_0)\),这个点不被等效成家具当且仅当这个点是起点或终点或\(x+y=k-1\)和\(x+y=k+1\)这两条斜线上都有与\((x_0,y_0)\)相连的点满足他们不被等效成家具
那么也就是说这种摆放方式是好的当且仅当每条斜线上都至少有一个点不被等效成家具
于是我们维护每个点是否被等价成家具以及每条斜线上没被等价成家具的点的个数即可
考虑在bfs中每个点只会入队一次
时间复杂度是\(O(nm+q)\)
T3 「JOI Open 2020」发电站
wangdy巨佬教我做的题,他tql
我们发现如果两个点间的开关都被开了,那么他们之间的点的开关开不开都是没有关系的,我们不妨认为他们全都开着
那么我们在树上实际上就是选择的连通块
记\(f[x]\)为选择\(x\)号点的最小代价
那么如果只选一个儿子或者不选儿子的话,这个点的贡献是正的
否则这个点的贡献是负的
分类讨论一下就行了
更新答案就考虑选的连通块里深度最浅的点是\(x\)即用\(f[x]\)更新答案
时间复杂度是\(O(n)\)