1 条题解
-
0
何老师 (root) LV 0 MOD @ 2021-12-07 18:41:14
暴力就是分4次,每次只考虑一种边bfs即可。时间复杂度O(nmq),期望得分24~32分。
只有普通道路的情况直接查询4个点即可。期望得分8分。
没有互通道路的情况,用并查集维护一个点上下左右能走到的最远点,能吃到棋子最多4个,暴力检验即可。期望得分12分。
结合上述 做法可以获得52的高分。
满分做法:
首先时间倒流,变为合并问题。
对于每个3道路构成的连通块,用线段树按照等级维护它周围的棋子。
同时,用并查集维护联通块的点数。
合并时进行线段树合并或启发式合并即可。注意一个点没有棋子后要把它从周围的线段树中删除。
同时注意相同位置上的棋子合并时不要算重,这个可以在叶子结点使用set实现。
对于2道路的问题,还是用并查集维护一个点上下左右能走到的最远点。
查询时,分为不吃与吃两种情况:
不吃:把3和2的点数加到一起,然后把重复的减去。
这个需要对每个联通块,每行开一个线段树,按照列维护。列的线段树同理。加点时线段树合并即可。
吃:直接在联通块维护的线段树上查询前缀和即可。
使用1,2道路的最多有8个点,暴力计算有几个不能只通过3道路吃掉即可。
注意代码复杂度较高。
- 1