题目 题意简述   link.   有一个 \(n\) 个元素的集合,你需要进行 \(m\) 次操作.每次操作选择集合的一个非空子集,要求该集合不是已选集合的并的子集.求操作的方案数,对 \(10^9+7\) 取模. 数据规模   \(n\le3\times10^4\). \(\text{Solution}\)   显然当 \(n<m\),答案为 \(0\),先特判掉.   首先列一个 naive 的 DP 方程,令 \(f(i,j)\) 为前 \(i\) 次操作选出的集合并大小为 \(j\)…
\(\mathcal{Description}\)   Link.   在一个 \(n\times n\) 的国际象棋棋盘上摆 \(n\) 个车,求满足: 所有格子都可以被攻击到. 恰好存在 \(k\) 对车可以互相攻击.   的摆放方案数,对 \(998244353\) 取模.   \(n\le2\times10^5\). \(\mathcal{Solution}\)   这道<蓝题>嗷,看来兔是个傻子.   从第一个条件入手,所有格子可被攻击,那就有「每行都有车」或「每列都有车」成立.不妨…
\(\mathscr{Description}\)   Link.   求 \(S\subseteq\{1,2,\dots,n\}\),使得 \(\prod_{i\in S}i\) 是完全平方数,并最大化 \(|S|\).   \(n\le10^6\). \(\mathscr{Solution}\)   爆搜打出 \(20\) 以内的表,发现 \(|S|\approx n\).先研究偶数 \(n=2k\): \[\begin{aligned} \prod_{i=1}^{2k} i! &= \le…
\(\mathscr{Description}\)   Link.   给定两棵含 \(n\) 个结点的树 \(T_1=(V_1,E_1),T_2=(V_2,E_2)\),求一个双射 \(\varphi:V_1\rightarrow V_2\),使得 \(\forall (u,v)\in V_1^2,~(u,v)\notin E_1\lor (\varphi(u),\varphi(v))\notin E_2\),或声明无解.   \(n\le10^4\). \(\mathscr{Solution…
\(\mathcal{Description}\)   Link.   有一个整数 \(x\in[0,n]\),初始时以 \(p_i\) 的概率取值 \(i\).进行 \(m\) 轮变换,每次均匀随机取整数 \(r\in[0,x]\),令 \(x\leftarrow r\).求变换完成后 \(x=i~(i=0..n)\) 的概率.答案模 \(998244353\). \(\mathcal{Solution}\)   令向量 \(\boldsymbol p\) 为此时 \(x\) 的取值概率,显然…
\(\mathcal{Description}\)   Link.   定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarrow u<v\).求一个对 \(E\) 的染色 \(f\),使得 \(\not\exist \lang v_1,v_2,\cdots,v_{k+1} \rang, |\{f(v_i,v_{i+1})\mid i\in[1,k]\}|=1\),同时最小化 \(f\) 的值域大小.   \(2\le k…
\(\mathcal{Description}\)   Link.   定义棵点权为 \(1\sim n\) 的二叉搜索树 \(T\) 是 好树,当且仅当: 除去最深的所有叶子后,\(T\) 是满的: 对于 \(T\) 中任意结点 \(r\),若 \(r\) 存在左儿子 \(u\),则 \(r\not\equiv u\pmod2\): 若 \(r\) 存在右儿子 \(v\),则 \(r\equiv v\pmod2\):   给定 \(n\),求 好树 数量.答案对 \(998244353\) 取…
\(\mathcal{Description}\)   Link.   求长度为 \(n\),值域为 \([1,m]\) 的整数序列 \(\lang a_n\rang\) 的个数,满足 \(\not\exist i\in[1,n),~\max_{j=1}^i\{a_j\}=\min_{j=i+1}^n\{a_j\}\),答案对大素数 \(p\) 取模.   \(n\le400\),\(m\le10^8\). \(\mathcal{Solution}\)   前几天刚胡了一个 "DP and DP…
\(\mathcal{Description}\)   Link.   有一个 \(n\) 个结点的图,并给定 \(m_1\) 条无向带权黑边,\(m_2\) 条无向无权白边.你需要为每条白边指定边权,最大化其边权和,并保证 \(m_2\) 条边都在最小生成树中.   \(n,m_1,m_2\le5\times10^5\). \(\mathcal{Solution}\)   先保证在 \(\text{MST}\) 中的限制--指定所有边权为 \(0\).并求出此时的 \(\text{MST}\)…
\(\mathcal{Description}\)   Link.   指定一棵大小为 \(n\),以 \(1\) 为根的有根树的 \(m\) 对邻接关系与 \(q\) 组 \(\text{LCA}\) 关系,求合法树的个数.   \(0\le m<n\le13\),\(q\le100\). \(\mathcal{Solution}\)   巧妙的状压 owo.不考虑限制,自然地有状态 \(f(u,S)\) 表示用 \(S\) 中的结点构成以 \(u\) 为根的树的方案数.转移相当于划分出一棵子…
\(\mathcal{Description}\)   Link.   维护一个 \(n\) 个点 \(m\) 条边的简单无向连通图,点有点权.\(q\) 次操作: 修改单点点权. 询问两点所有可能路径上点权的最小值.   \(n,m,q\le10^5\). \(\mathcal{Solution}\)   怎么可能维护图嘛,肯定是维护圆方树咯!   一个比较 naive 的想法是,每个方点维护其邻接圆点的最小值,树链剖分处理询问.   不过修改的复杂度会由于菊花退化:修改"花蕊"的圆…
\(\mathcal{Description}\)   link.   给定 \(n\) 个点 \(m\) 条边的无向图和一个源点 \(s\).要求删除一个不同与 \(s\) 的结点 \(u\),使得有最多的点到 \(s\) 的最短距离改变.求出此时最短距离改变的结点的数量.   \(n\le2\times10^5,m\le3\times10^5\). \(\mathcal{Solution}\)   首先,以 \(s\) 为源点跑一个单源最短路.设 \(s\) 到 \(u\) 的距离为 \(d…
\(\mathcal{Description}\)   link.   给一个 \(n\) 个点 \(m\) 条边的无向图 \(G\).设图上有 \(k\) 个连通块,求出添加 \(k-1\) 条边使得这些连通块全部连通的方案数.对给定的 \(p\) 取模.   \(n,m\le10^5\). \(\mathcal{Solution}\)   \(\text{Prufer}\) 序列,设第 \(i\) 个连通块(可能是单点)的度数为 \(d_i\),大小为 \(s_i\).考虑连通块都是单点,方…
\(\mathcal{Description}\)   Link.   在一张 \(n\times m\) 的网格图中有空格 . 和障碍格 #,\(q\) 次询问,每次查询从 \((x_1,y_1)\) 出发,是否能仅向下或向右走,在不经过障碍格的情况下走到 \((x_2,y_2)\).   \(n,m\le500\),\(q\le6\times10^5\). \(\mathcal{Solution}\)   Trick 向的分治解法.   不妨按行分治,设当前分治区间为 \([l,r]\),取…
\(\mathcal{Description}\)   Link.   初始有一个有向图 \(G=(V,E)\),\(V=\{s,t\}\),\(E=\langle s,t\rangle\),一次操作定义为取任意 \(\langle u,v\rangle\in E\),设 \(w\) 为一个新结点,则令 \(V=V\cup\{w\}\),\(E=E\cup \{\langle u,w\rangle,\langle w,v\rangle\}\).现进行 \(n\) 次操作,求最终有多少个本质不同的…
\(\mathcal{Description}\)   Link.   给定一棵包含 \(n\) 个点的有标号树,求与这棵树重合恰好 \(0,1,\cdots,n-1\) 条边的树的个数,对 \(10^9+7\) 取模.   \(n\le100\). \(\mathcal{Solution}\) \(\mathcal{Case~1}\)   考虑把"是否是原树上的边"看做一种权值,相当于求完全图的生成树.具体地,令完全图中,原树有的边的权值为 \(1\),否则为 \(x\),用多项式暴…
\(\mathcal{Description}\)   Link.   对于 \(x\in\mathbb N^*\),令 \(s(x)\) 表示将 \(x\) 十进制下的各位数码排序后得到的十进制数的值.求 \(\sum_{i=1}^X s(i)\) 对 \((10^9+7)\) 取模的结果.   \(X\le10^{700}\). \(\mathcal{Solution}\)   下记 \(m=10\)(进制),\(n=\lceil\log_mX\rceil\). \(\mathcal{Cas…
\(\mathcal{Description}\)   Link.   给定数列 \(\{a_n\}\),求排列 \(\{p_n\}\) 的个数,使得 \((\forall i\in[1,n))(a_{p_i}a_{p_{i+1}}\not=k^2)\),其中 \(k\in\mathbb N\). \(\mathcal{Solution}\)   首先消掉每个数的平方因子,那么限制条件转化为 \(a_{p_i}\not=a_{p_{i+1}}\),我们可以把相等的数放在一个桶里.设桶的大小 \(…
\(\mathcal{Description}\)   Link.   给定 \(n,p_a,p_b\),初始有一个空串,每次操作有 \(\frac{p_a}{p_a+p_b}\) 的概率在其后添加字符 \(\texttt{'a'}\),\(\frac{p_b}{p_a+p_b}\) 的概率添加字符 \(\texttt{'b'}\),当子序列 \(\{\texttt{'a'},\texttt{'b'}\}\) 的个数不小于 \(n\) 时,结束操作.求子序列的期望个数,对 \(10^9+7\)…
\(\mathcal{Descriptoin}\)   Link.   你有一个容量为 \(k\) 的空书架,现在共有 \(n\) 个请求,每个请求给定一本书 \(a_i\).如果你的书架里没有这本书,你就必须以 \(c_{a_i}\) 的价格购买这本书放入书架.当然,你可以在任何时候丢掉书架里的某本书.请求出完成这 \(n\) 个请求所需要的最少价钱.   \(n,k\le80\). \(\mathcal{Solution}\)   网络瘤嘛--   费用流,考虑先全部买入,再抵消花费.具体地…
\(\mathcal{Description}\)   Link.   给定 \(n\) 个点 \(m\) 条边的无向图,边有边权,一个人初始速度为 \(1\),每走一条边速度 \(\div10\),求从 \(1\) 走到 \(n\) 的最小耗时.   \(n,m\le10^5\),\(0\le\text{边权}\le9\). \(\mathcal{Solution}\)   直观地,路径长度即为把经过的边权从低位到高位写成的十进制数.   首先排除前导 \(0\)--把从终点出发,仅走边权为…
\(\mathcal{Description}\)   Link.   给定正整数集合 \(\{a_n\}\),求一种把这些数放置在任意多个圆环上的方案,使得每个环的大小大于 \(2\) 且环上相邻两数之和是素数.   \(n\le200\),\(2\le a_i\le10^4\). \(\mathcal{Solution}\)   这题怎么也黑了呢 qwq--   考虑到 \(2\le a_i\),有 \(4\le a_i+a_j\),所以素数必然是奇素数,而一个环必然是偶环.一个常见的套路是…
\(\mathcal{Description}\)   Link.   给定 \(n\) 个点 \(m\) 条边的无向图,判断是否有给每条边定向的方案,使得 \(q\) 组有序点对 \((s,t)\) 都有 \(s\) 可达 \(t\).   \(n,m,q\le2\times10^5\). \(\mathcal{Solution}\)   首先,对于原图中的边双,显然是可以让它们互相可达的,考虑把边双缩点.   此后,图变成了一片森林.单独考虑一棵树,从 \(s\) 到 \(t\) 的有向路径…
\(\mathcal{Description}\)   Link.   给定 \(n\) 个点的竞赛图,第 \(i\) 个点代表了 \(s_i\) 个人,每个人(0-based)可能有真金条.此后在 \(t\) 时刻,对于图上任意边 \(\langle u,v\rangle\),若 \(u\) 中第 \(t\bmod s_u\) 个人有金条(无论真假),且 \(v\) 中第 \(t\bmod s_v\) 个人没有金条,那么后者获得一根假金条.   足够长的时间后,所有人开始卖金条.真金条必定能出…
\(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树,反复随机选取一条边,合并其两端两点,新点编号在两端两点等概率选取.问每个点留到最后的概率.   \(n\le50\). \(\mathcal{Solution}\)   推荐 @ywy_c_asm 的博客 owo.   所有的操作方案数是 \((n-1)!\),我们可以按删边顺序看做一个长度为 \(n-1\) 的序列.对于每个点分别计算答案,把当前要算的点提为根(记为 \(r\)),我们只需要…
\(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),问是否存在一棵二叉搜索树,使得其中序遍历为 \(\{a_n\}\),且相邻接的两点不互素.   \(n\le700\). \(\mathcal{Solution}\)   显然的 \(\mathcal O(n^4)\) DP:\(f(l,r,i)\) 表示区间 \([l,r]\) 是否能构成以 \(i\) 为根的树.   一个重要的性质:若区间 \([l,r]\) 构成二叉搜索树的一棵完整的…
\(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\) 和 \(m\) 个操作,第 \(i\) 个操作有 \(p_i\) 的概率将 \([l_i,r_i]\) 内的元素 \(+1\).且保证任意两个区间要么不交,要么有包含关系.求所有操作完成后序列最大值的期望.   \(n\le10^5\),\(m\le5000\). \(\mathcal{Solution}\)   首先应当知道,\(E(\max\{a_i\})\not=\max\{E(a_i…
\(\mathcal{Description}\)   Link.   给一个 \(n\times n\) 的棋盘,其中 \(q\) 个互不重叠的子矩阵被禁止放棋.问最多能放多少个互不能攻击的车.   \(n,q\le10^4\). \(\mathcal{Solution}\)   如果把问题转化成"只允许在某些子矩阵上放棋",就是一个很显然的线段树优化建图最大流.源点连向行上的线段树叶子,流量为 \(1\):行上的线段树结点向父亲连边,流量为正无穷:对于每个矩阵,行在树上分裂的 $\…
\(\mathcal{Description}\)   Link.   \(n\) 个公司,每个公司可能独立或者附属于另一个公司.初始时,每个公司附属于 \(a_i\)(\(a_i=-1\) 表示该公司独立).不存在两级及以上的附属关系.每次事件随机选取两个独立的公司,使其中一个公司所拥有的附属公司全部独立,并且该公司成为另一个公司的附属.求使仅存在一个独立公司的期望操作次数.对 \(10^9+7\) 取模.   \(n\le500\). \(\mathcal{Solution}\)   奇怪的…
\(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个点的树和 \(q\) 次加边操作.求出每次操作后,满足 \(u,v,w\) 互不相等,路径 \((u,w)\) 与 \((v,w)\) 无重复边的有序三元组 \((u,v,w)\) 的个数.   \(n,q\le10^5\). \(\mathcal{Solution}\)   考虑原树上,以某个点为 \(w\) 的贡献.记 \(\operatorname{contr}(u)\) 为 \(u\) 的贡献…