上一页 1 2 3 4 5 6 7 8 ··· 18 下一页
摘要: 题意:给定长度 $n \leq 5 \times 10^5$ 的 popcount 序列 $\{a_i\}$,求其对应的原序列。思路:观察发现 popcount 序列具有倍增构造性质,将原序列 $[0,2^k - 1]$ 的第 $k$ 位改成 $1$ 可得到 $[2^k,2^{k + 1} - 1]$,表现为相同颜色框右边比左边加 $1$ 。由于难以从大框框确定分组,故从小框框开始。通过比较相邻元素,若左边加 $1$ 等于右边则分为一组,每个框框仅记首位数字用于比较。不断分组,直至整个序列分组完成。时间复杂度 $O(n)$,计算为 $n + \frac{n}{2} + \frac{n}{4} + \cdots + 2 + 2 + 2 + \cdots + 2 = O(n)$,过程中记得判断无解情况。 阅读全文
posted @ 2025-09-23 15:43 wing_heart 阅读(51) 评论(1) 推荐(1)
摘要: 题意:对递归$n$层($n \le 10^7$)的闪现树,求深度$k \in [l,r]$($l,r \le 10^7$)的点数。思路:一是递推法,设$f_i$为深度$i$根点数,依规则递推并修正多算部分,结合非根点数$g_i = 2f_{i - 1}$与叶子节点得解;二是生成函数法,设$F(x)$为根生成函数,依递归关系推导,利用等比数列公式及二项式展开求系数,结合非根与叶子节点生成函数,线性时间内求出深度在$[l,r]$的点数 。 阅读全文
posted @ 2025-09-17 10:37 wing_heart 阅读(5) 评论(0) 推荐(0)
摘要: 题意:给定一棵有 \(n\) 个点(\(n \le 1000\))的树,每条边 \((u, v)\) 有参数 \(c\) 表明 \(u\) 和 \(v\) 谁必须排在前面,求满足所有边条件的排列种数。思路:采用容斥原理解决。先以 \(1\) 为根,将所有 \(c = 1\) 的边看作无限制,求方案数,再通过容斥调整。可在树形DP中带上容斥系数,朴素DP设 \(f_{u,p,s}\) 复杂度超了,将 \(s\) 改为 \(0/1\) 表示其奇偶性。也可利用外向树拓扑序计数公式 \(\frac{n!}{\prod_{i = 1}^n siz_i!}\) 来解决,设 \(f_{u,s}\) 表示满足 \(u\) 的连通块大小为 \(s\) 且在转移时带上容斥系数,整棵子树的方案数,时间复杂度为树形背包的 \(O(n^2)\)。 阅读全文
posted @ 2025-09-16 16:29 wing_heart 阅读(29) 评论(0) 推荐(0)
摘要: 题意:给定 $n$ 个数($n \le 200$,$a_i \le 5 \times 10^4$),求所有满足至少有 $k$ 个子集 $S$ 使得 $\sum_{i \in S} a_i = w$ 的 $w$ 的异或和,$k \le 7$,时限 $0.5s$。思路:朴素背包 DP 复杂度为 $O(n \sum a_i)$,考虑到 $k$ 较小且 $\sum a_i = 10^7$,利用 bitset 优化。原本背包中 $f_i$ 表示和为 $i$ 的方案数,加一个数 $a$ 时 $f'_{i+a} \gets f_{i}$,这里使用 bitset 做位移和按位或操作。对于 $k>1$ 的情况,定义 $f_{k,i}$ 表示考虑到当前数字时,和为 $i$ 的方案数是否达到 $k$,通过 $f_k \gets f_k \mid (f_{k - 1} \ll a)$ 递推,时间复杂度为 $O(k \frac{n \sum a_i}{w})$,能满足时限要求。 阅读全文
posted @ 2025-09-16 09:10 wing_heart 阅读(33) 评论(0) 推荐(0)
摘要: 题意:给定 $n$ 个数 $a_i$($n,m \le 20$,$a_i,Y \le 10^{18}$),求 $[1,Y]$ 中满足恰好有 $m$ 个 $a_i$ 能整除 $x$ 的 $x$ 的个数。思路:利用容斥原理和二项式反演求解。设 $f_k$ 为恰好有 $k$ 个 $a_i$ 整除 $x$ 的 $x$ 的个数,$h_j$ 为所有大小为 $j$ 的子集 $S$ 对应的 $\lfloor Y / \text{lcm}(a_i, i \in S) \rfloor$ 之和。通过二项式反演,$f_m = \sum_{j \ge m} (-1)^{j - m} \binom{j}{m} h_j$。枚举所有非空子集,计算其元素的 lcm,结合子集大小和反演公式计算贡献,最终得到结果,时间复杂度为 $O(2^n n)$,可满足条件。 阅读全文
posted @ 2025-09-15 17:17 wing_heart 阅读(101) 评论(4) 推荐(0)
摘要: 题意:给定一个无向图,$n,m \le 10^4$,需对每个点黑白染色,使每条边两端点颜色不同,求对每一条边,删除该边后是否存在合法染色方案。思路:合法染色方案即删除边后图为二分图,不存在奇环。先构造 dfs 生成树,将一条非树边和其覆盖树边形成的环称为基本环,包含多个非树边的环长奇偶性等于各基本环奇偶性异或和。特判原图无环情况,树边成为答案边需满足不存在长度为奇数的不包含它的基本环,且包含它的基本环长度都为奇数,可用树上差分求解;非树边成为答案边需满足不存在其他长度为奇数的基本环,总时间复杂度为线性。 阅读全文
posted @ 2025-09-12 11:18 wing_heart 阅读(25) 评论(0) 推荐(0)
摘要: 给定序列 $a_i$ 和参数 $m$ 、 $k$ ,进行 $m$ 次操作每次选 $k$ 个不同位置加 $1$ ,求所有 $p \in [1,n]$ 下前 $p$ 大数字集合的个数和。解法通过贪心分析,合法集合需满足集合内最小值 $Min$ 和最大值 $Max$ 满足 $Min + m \ge Max$ ,且集合内小于 $Max$ 的数字与 $Max$ 的差之和 $\sum_{x \in S, x < Max} (Max - x) \le m \times k$ 。使用动态规划,对序列排序后枚举 $Max$ ,利用可删除背包 DP 计数满足条件的子集方案数,时间复杂度 $O(n^4)$ ,空间复杂度 $O(n \sum a_i)$ 。 阅读全文
posted @ 2025-09-10 20:41 wing_heart 阅读(2) 评论(0) 推荐(0)
摘要: 给定无向图,边权为 $w_i$ ,重新赋权 $w'_i \in [0, w_i]$ 使得所有生成树的边权异或和相同。通过点双连通分量缩点,点双内边权必须相同:点数为奇数的点双异或和必须为 $0$ ,方案数为 $(\min w_i) + 1$ ;点数为偶数的点双异或和在 $[0, \min w_i]$ 内且方案唯一。处理修改时,使用数位 DP 和动态规划维护状态 $f_{d,0/1}$ 和 $g$ ,通过逆元处理删除操作,时间复杂度为 $O((n+q) \log V)$ ,其中 $V$ 是权值范围。 阅读全文
posted @ 2025-09-09 08:12 wing_heart 阅读(5) 评论(0) 推荐(0)
摘要: 给定一棵 $n$ 个点的树,点权为 $a_i$,求可删空连通块个数。可删空指连通块点集能通过每次删除两个点权不同的点最终删空,等价于点集大小为偶数且众数出现次数不超过点集大小的一半。解法先计算所有大小为偶数的连通块个数 $A$,再减去不可删空连通块个数 $B$(即众数出现次数超过一半的偶数大小连通块),答案为 $A - B$。使用树形 DP:dfs1 通过状态 $g[u][0/1]$ 统计子树 $u$ 中大小为偶/奇数的连通块数,得到 $A$;dfs2 针对每种颜色 $x$,设 $f[u][d]$ 表示子树 $u$ 中点权 $x$ 出现次数与半大小的差为 $d$ 的连通块数,只考虑 $d > 0$ 的情况,合并子树时使用背包优化,总复杂度为 $O(n^2)$。 阅读全文
posted @ 2025-09-07 20:54 wing_heart 阅读(12) 评论(0) 推荐(0)
摘要: 给定一棵 $n$ 个节点的树,边有权重 $w$ ,每个点有 $a_i$ 个人,需要选择两个点建设银行,使得所有人到最近银行的距离之和最小。单银行时,银行应建在树的重心,贡献可拆解到每条边,为 $w \min(size_u, S - size_u)$ ,其中 $size_u$ 是子树大小,$S$ 是总人数。对于双银行,通过枚举边将树分割成两部分,每部分独立求重心并计算贡献,利用动态规划和树的性质,结合重链剖分和倍增优化,时间复杂度为 $O(n \log n)$ 。代码实现了这一思路,通过遍历树结构求解最小距离和。 阅读全文
posted @ 2025-09-05 11:28 wing_heart 阅读(10) 评论(0) 推荐(0)
摘要: 给定序列 $ s_i $ 和参数 $ m $ ,对于每个 $ k \in [1, m] $ ,求最少和最多选择几个数字使得它们的 $ \gcd $ 等于 $ k $ 。最多选择可通过直接统计所有 $ k $ 的倍数的数字个数得到。最少选择利用答案最多为 $ 7 $ 的特性,枚举可能答案 $ cnt $ ,通过组合数 $ \binom{c}{cnt} $ 和容斥原理计算方案数 $ f_k = \binom{c}{cnt} - \sum_{d>k, k \mid d} f_d $ ,找到最小 $ cnt $ 使得 $ f_k > 0 $ 。该方法高效,时间复杂度为 $ O(7 \cdot V \log V) $ ,其中 $ V $ 是值域。 阅读全文
posted @ 2025-09-04 15:56 wing_heart 阅读(0) 评论(0) 推荐(0)
摘要: 对于序列重排问题,目标是最大化满足 $ a_i \ge a_{i-1} \land a_i \ge a_{i+1} $ 的索引 $ i $ 的数量,其中 $ a_0 = a_{n+1} = 0 $。该问题通过排序序列后,采用贪心策略:尝试将出现次数较少的数字插入到比它大的数字之间的空位中,以期增加有效索引的数量。使用线段树维护后缀空位数目,确保插入操作可行。若所有数字相同(即 $ m=1 $),需特判。该算法时间复杂度为 $ O(n \log n) $ 。 阅读全文
posted @ 2025-09-03 20:49 wing_heart 阅读(2) 评论(0) 推荐(0)
摘要: 无。 阅读全文
posted @ 2025-09-02 12:02 wing_heart 阅读(39) 评论(0) 推荐(0)
摘要: 题意:n点树,边相邻指共端点;合法DFS路径从某边出发,有未访问邻边必进,否则回溯。给k个关键边,求以此为起点的不同构有标号无向边DFS树数($n \leq 10^5$)。 思路:边重编号(树根1,边$u$是点$u$连父边,编号$\in [2,n]$)。k=1时答案$\prod_{i=1}^n (d_i-1)!$($d_i$为点度,点$i$边排序列定首边后余边自由)。k>1用容斥:关键边在同链,链上点(非端点)贡献$(d_u-2)!$,余点$(d_u-1)!$,总方案为$\prod_{i=1}^n (d_i-1)! \times \left( \prod_{i \in L} \frac{1}{d_u-1} \times (-1)^{|S|+1} \right)$($L$链点集,$S$候选根边集)。设$c_i = \frac{1}{d_u-1}$,树形DP算后半部分(带容斥),结果为DP乘$\prod_{i=1}^n (d_i-1)!$,时间线性。 阅读全文
posted @ 2025-09-02 11:42 wing_heart 阅读(109) 评论(0) 推荐(0)
摘要: 动态 DP(DDP)是解决带点权或边权修改的树上动态规划问题的方法,例如动态维护树的最大权独立集。其核心是将 DP 转移方程转化为矩阵形式,定义广义矩阵乘法 $ C_{i,j} = \max_k (A_{i,k} + B_{k,j}) $ ,该运算满足结合律。通过树链剖分将树分解为链,并用线段树维护转移矩阵的乘积。修改点权时,仅需更新该点到根路径上 $ O(\log n) $ 条链的信息,单次操作时间复杂度为 $ O(\log^2 n) $ 。采用全局平衡二叉树可优化至 $ O(\log n) $ 。 阅读全文
posted @ 2025-09-01 18:56 wing_heart 阅读(44) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 ··· 18 下一页