2024HDU 6th
T1
显然我们选择的点度数为2。
考虑若答案为Yes,则原图最多有5个度数为2的点。多于5个直接判为No。
因此可以枚举所有度数为2的点,暴力判断以该点为根,两个儿子的子树是否为菊花图。这是简单的,因为树为菊花图当且仅当点数不超过2或者一度点的个数等于点数-1。
时间复杂度 \(O(n)\)。
T2
考虑图中是否存在一条边 \((u,v)\),使得存在与 \(u\) 相邻的点 \(x(x\neq v)\) 和与 \(v\) 相邻的点 \(y(y\neq u)\),\(x\) 可以等于 \(y\)。
若存在,则只有 \(u,v,x,y\) 可能是混沌点,因为它们构成长度为3的链或环,不可能是菊花的一部分。
接下来,只要暴力考虑这几个点是否为混沌点。用并查集维护连通块大小和一度点个数即可,出现环即不合法。
如果这几个点都不合法,则图中没有混沌点。
若不存在,则原图就是一个“菊花森林”,所有点都是混沌点。
时间复杂度 \(O(n\alpha(n))\)。
T3
用set记录有轨道的格子,修新轨道时查询工人面向的格子是否已有轨道,并更新工人当前面向的格子和面朝的方向。
T4
简单模拟。 还没补。
T5
直接用三进制表示状态,以每次操作为阶段进行dp,dp数组显然表示得到每种状态的操作种类数。
用0表示绿,1表示黄,2表示红会比较好写。
比较好的转移方式是刷表,将十进制状态转为三进制,在转换过程中直接应用操作并计算后继状态。
T6
不会做
T7
记 \(node_i\) 为编号为 \(i\) 的节点。
我们尝试对每个 \(i\in [1,n]\) 求出 \(mex\ge i\) 的连通块个数,随后容易算出答案。
以 \(node_0\) 为根进行dp,\(dp_u\) 表示 \(u\) 子树中包含 \(u\) 的连通块数。
转移显然为 \(dp_u=\prod_{v\in son_u}{(dp_v+1)}\)。
对于每个 \(i\in [1,n]\),设包含所有编号小于 \(i\) 的点的最小连通块为 \(T_i\)。
那么 \(mex\ge i\) 的连通块数即为所有不属于 \(T_i\) 且与 \(T_i\) 中的某些点相邻的点 \(x\) 的 \(dp_x+1\) 的乘积,记为 \(val_i\)。特别地,\(val_n=1\)。
如何从 \(T_i\) 和 \(val_i\) 得到 \(T_{i+1}\) 和 \(val_{i+1}\) 呢?
考虑将 \(node_{i+1}\) 加入 \(T_i\)。
只要暴力往上跳,并把经过的点标记,直到遇到有标记的点为止。
对于 \(val\) 的维护,应该除去跳到的最后一个无标记的点的贡献,并加入所有跳到的无标记的点的无标记的儿子的贡献。
时间复杂度 \(O(nlogP)\),因为除去贡献时要算逆元。

浙公网安备 33010602011771号