T1 elim
给你一个消消乐游戏的界面,$3$ 个及以上的同色连块会消除,求一次消除之后是什么样的
sol:模拟
T2 battleground
给你一个 $n imes n$ 的棋盘,上面有 $m$ 个玩家,玩家可以向 $8$ 个方向走,有的地方有障碍不能走,不能斜着从两个障碍里面挤过去(大概就是右边有障碍 + 下面有障碍 = 你不能走到右下)。有 $f$ 个回合,每回合会给你一个毒圈,毒圈里面的障碍会无效,所有玩家都会向毒圈里的一个目标(每个人可能目标不一样)走,在毒圈外面走一步会 $-1s$ ,给出每个人初始的生命,求这 $m$个人跑毒结束后还有多少生命 (生命值最低为 $0$ ,去世的玩家生命值视为 $0$ )
sol:
因为毒圈里不掉血也没有障碍,所以只要找出每个人走到毒圈里要走多远就可以了
不妨设他们都要走到毒圈的圆心,于是我们可以从圆心开始 $bfs$ ,圈里走一步代价为 $0$
圈外走一步代价为 $1$ 算出走到每个点的代价就可以算出每个人每轮扣的血了
T3 greedy
给你一个求图的独立集的算法,让你模拟
算法如下:
1.规约
step1.删掉所有度为 0 的点加入独立集
step2.删掉所有度为 1 的点和它相邻的点,并把那个编号小的那个加入独立集
如果当前不能规约,我们执行下面的
2.贪心
step1.找出度最大的点,如果唯一,删掉它
step2.如果不唯一,找到一个删掉后能使剩下的度数为 1 的点数最多的点,如果还有多个,删掉编号最大的点
$n leq 10^5$
$m leq 5 imes 10^5$
sol:暴力
维护一个 set / 可删除堆
堆内维护一个三元组表示 (度,跟它相连且度为 2 的点的个数,编号)
操作 1 直接做,操作 2 也是直接做
每个点只有在当做堆顶和度为 1 的时候会执行两次“把周围一圈的点的度 -1 ”
所以复杂度是对的