【CSP-S2019模拟】【Comet OJ 模拟赛Day2T3】11.10比赛总结

最后几套模拟赛了

比赛思路

传送门

  • T1(赛博朋克酒保行动):随便算一算
  • T2(模拟旅行):刚开始觉得这题很神仙。但是数据那么大,肯定是直接最短路的。所以不妨思考一下怎么直接最短路。然后我想到直接以每一个关键点作为起点,一起最短路。但是可能会有自己到自己的情况。那么再记一个次短路不就好了(上了发SPFA)。
  • T3(迷雾华光):离线不是裸的树上莫队吗。

赛后消化

  • T2SPFA能获得0-20分不等的好成绩。众所周知,SPFA是O(nm)的算法。
  • 改成Dij啊啊啊啊啊(在线学习Dij)
  • T3对于序列问题可以直接分块。同理,对于树上问题也可以树分块(裸题??)
  • T3还是比较难打的。

Comet OJ 模拟赛 Day2

  • 没有打(真香)
  • 主要记录一下T3。
  • 题意就是在一颗树上每一次修改一个节点的二进制状态,求与它and为0的相邻节点的个数。
  • 首先只用记录每一个点的儿子的贡献。改的时候处理父亲。
  • O(2m)修改,O(1)查询
  • 或O(2m)查询,O(1)修改。
  • 平衡规划一下。改成O(2m/2)修改,O(2m/2)查询。
  • 对于一个状态,修改时前一半转移到它的父亲集合,后一半保留在原地。查询时前一半保留,后一半找它的子集。
  • 注意到如果儿子个数很少的话,其实是不如直接暴力的。对于d<=2m/2的暴力。
  • 这样就可以解决空间的问题。
  • 时间空间O(n*2m/2)

总结

  • 这辈子再也不打SPFA了(能dij为什么要SPFA)。
  • 分块的题目我还是很少直接想出来。。。
原文地址:https://www.cnblogs.com/DeepThinking/p/13090913.html