9.22 NTF 集训队讲题

【清华集训 2014】主旋律

题意

给定一个 \(n\) 个点 \(m\) 条边的简单有向图,求所有边的子集中,有多少个满足这个保留这个边集后图强连通。

\(n \le 15\),提交地址:https://uoj.ac/problem/37

分析

\(f_s\):只考虑点集 \(s\),图强连通的方案数。正难则反,考虑算不强联通的,显然这样能将原图分为若干个强连通分量组成的 DAG,考虑分层剥叶子。

容易算重,于是容斥,设 \(g_s\):点集 \(s\) 组成若干强连通分量的方案数(带容斥系数)。考虑 \(g\) 转移:枚举子集 \(t\),则有 \(g_s \gets -f_t g_{s - t}\)

\(d_s\):点集 \(s\) 的导出子图的边数,\(d_{s \to t}\):点集 \(s\) 中的点连向 \(t\) 中的点的边数。则有 \(f_s \gets g_t 2^{d_{s - t}} 2^{d_{t \to (s - t)}}\)

时间复杂度 \(\mathcal O(3 ^ n)\)

Code

提交记录:https://uoj.ac/submission/655841

IOI2023 集训队互测 R3T1 整数

题意

给定长度为 \(2^n\)01 序列 \(\{b_i\}\)。定义长度为 \(n\) 的序列 \(\{a_i\}\) 是好的,当且仅当在每一个二进制为 \(k\) 下,\(a\) 这一位拼接的二进制数满足 \(b_s = 1\)。给定上界,求 \(a\) 的数量。

\(n \le 18, r_i \le 2^{60}\),提交地址:https://qoj.ac/problem/5019

分析

考虑数位 DP,从前往后推,设 \(f_s\):集合 \(s\) 违反上界的方案数;所求即为 \(f_{\emptyset}\)

假设考虑到第 \(j\) 位,按 \(r_{i,j}\) 分类:

  • \(r_{i, j} = 0\):仅当 \(a_{i,j}\)\(1\) 时违反,否则不变;
  • \(r_{i,j} = 1\):仅当 \(a_{i,j}\)\(0\) 时不违反,否则不变。

发现相当于对于这一位 \(r_{i,j}\)\(0\) 时或卷积,\(1\) 时与卷积。FWT 即可。

时间复杂度 \(\mathcal O(2^n n \log r)\)

Code

提交记录:https://qoj.ac/submission/187683

IOI2023 集训队互测 R15T1 翻修道路

题意

给定一个 \(n\) 个点 \(m\) 条边的有向图,每条边边权 \(a_i\),或通过操作使之变成 \(b_i\)(保证 \(1 \le b_i \le a_i\))。给定 \(k\) 个关键点,对于 \(x = 1, \dots m\),操作至多 \(x\) 次,\(1\) 到关键点距离的最大值的最小值。

\(n, m \le 100, k \le 8\),提交地址:https://qoj.ac/problem/5175

分析

考虑在最短路树上 DP,设 \(f_{u, i, s}\):从 \(u\) 开始,操作 \(i\) 次,已包含关键点集合 \(s\) 的最大值最小值。

转移与斯坦纳树类似,从 \((v, i, s) \to (u, i/i+1,s/s \ \cup {u})\),或在同一子树中合并集合,时间复杂度 \(\mathcal O(m2^k \times m\log m)\)

Code

提交记录:https://qoj.ac/submission/188438

「THUSCH 2017」巧克力

题意

给定 \(n \times m\) 的表格,每个格子有权值和颜色(为 \(-1\) 就是不能选)。问最小的四连通块使得其中包含至少 \(k\) 中颜色,以及此基础上中位数的最小值。

\(n \times m \le 233, k \le 5\)

分析

假设只有 \(k\) 种颜色,那直接将表格想象成图,让后设 \(f_{u, s}\):你在 \(u\),已收集到颜色集合 \(s\) 的最小连通块大小,套用斯坦纳树转移即可。考虑中位数就直接二分答案,然后在记录第二维小于 \(mid\) 减大于 \(mid\) 的最小值即可。

考虑随机分组解决多种颜色的问题,发现只需每组颜色出现在不同组中至少一次即可,\(100\) 多次就行了。

时间复杂度 \(\mathcal O(T3^knm\log(nm)\frac{k^k}{k!})\)

Code

提交记录:https://loj.ac/s/1895842

IOI2023 集训队互测 R8T1 环覆盖

题意

给定 \(n\) 个点 \(m\) 条边的简单有向图,对于每个 \(i \in [0, m]\),计算保留 \(i\) 条边,原图为一个边仙人掌的方案数。

\(1 \le n \le 25\),提交记录:https://qoj.ac/problem/5089

分析

考虑即要求存在欧拉回路,所以要求每个点度数为偶数,将一条边看成一个点集合,那么相当于求对称差为 \(\emptyset\) 的方案数。

考虑对于每条边转化为集合幂级数 \(f_i(x,y) = 1 + x^{\{u_i,v_i\}}y\),令 \(F(x,y)=\prod f_i(x,y)\),所求即为 \([x^{\emptyset}y^i]F(x,y)\),考虑对 \(x\) 这一维进行 FWT,考虑 FWT 的意义是完全在一个集合内的边数减去一边在其中的边数,所以每一项形如 \(1 \pm y\),所以答案对所有 \(s\) 统计 \((1 - y)^{a_s}(1 + y)^{m - a_s}\)

IFWT 的第 \(\emptyset\) 就相当于所有这样的多项式的和,直接使用组合数计算,时间复杂度 \(\mathcal O(2^n + m^2)\)

Code

提交记录:https://qoj.ac/submission/188116

CF1149D Abandoning Roads

题意

给定 \(n\) 个点 \(m\) 条边的无向联通图,只有 \(a,b\) 两种边权(\(a < b\))。考虑这张图中的所有最小生成树,对于每个 \(i\),求 \(1\)\(i\) 在所有最小生成树中的最小距离。

\(n \le 70, m \le 200\),提交地址:https://codeforces.com/problemset/problem/1149/D

分析

考虑那些边可能出现在最小生成树中:

  • 所有 \(a\) 边(不成环);
  • 链接由 \(a\) 边组成的连通块的 \(b\) 边。

考虑将所有 \(a\) 边提取出来缩点,让后只要在跑最短路时不会到同一个点即可。发现对于大小小于等于 \(3\) 的连通块,无论如何都不可能走回头路,所以只需要记录大小大于 \(3\) 的连通块是否到达过,跑分层图最短路,即可。

时间复杂度 \(\mathcal O(2^{\frac{n}{4}} m\log m)\)

Code

提交记录:https://codeforces.com/contest/1149/submission/225192424

CF1261F Xor-Set

题意

给定集合 \(A,B\),求 \(C = \{x | x = a \bigoplus b, a \in A, b \in B\}\) 的所有元素的和。集合有若干个区间给出。

\(1 \le n, m \le 100, 1 \le l_i \le r_i \le 10^{18}\),提交地址:https://codeforces.com/problemset/problem/1261/F

分析

考虑将区间按二进制位拆开,若一个长度 \(2^x\) 的区间和长度为 \(2^y\) 的区间合并(\(x \le y\)),那么结果会是一个长度为 \(2^y\) 的区间,高位有两个区间的高位异或起来决定。区间数太多,不能接受。

考虑到,对于从同一个区间中衍生出的所有长度 \(2^x\),且 \(x \le y\) 的子区间,它们与较长区间的异或结果相同,所以就没必要了,所以每个区间唯一对应一个区间,区间并即可。

时间复杂度 \(\mathcal O(mn\log^2V)\)

Code

提交记录:https://codeforces.com/contest/1261/submission/225197423

CF1062F Upgrading Cities

题意

给定 \(n\) 个点 \(m\) 条边的 DAG,问有多少个 \(u\),满足:至多存在一个 \(v\)\(u \not \to v \land v \not \to u\)

\(n, m \le 3 \times 10^5\),提交地址:https://codeforces.com/problemset/problem/1062/F

分析

考虑拓扑排序后,令 \(u \gets id_u\)\(id_u\)\(u\) 拓扑排序后的编号。

考虑分 \(< u\)\(> u\) 两部分分析,以小于为例。对于一个 \(v < u\),若存在 \(w < u, (v, w) \in E\),那么 \(v \not \to u\) 可以推出 \(w \not \to u\),那么判断 \(v\) 无意。

\(r_u = \min\{v | (u, v) \in E\}\),那么所有 \(< u\) 的点能到达 \(u\) 相当于 \(\forall v < u, r_v \le u\)

那么原问题相当与若只存在一个 \(v < u\) 满足 \(r_v > u\),则将它删去后重新检查,删掉 \(v\) 会使所有以 \(v\) 为最小出边的点,记 \(R_v\) 表示次小值即可。

时间复杂度 \(\mathcal O(n + m)\)

Code

提交记录:https://codeforces.com/contest/1062/submission/225203501

CF715E Complete the Permutations

题意

给定两个排列 \(\{p_n\}, \{q_n\}\)(有部分位置未知),定义 \(p, q\) 的距离为不断交换 \(p\) 中的两个数,使得 \(p, q\) 相同的最小交换次数。求 \(i := 0, \dots n -1\)\(p, q\) 距离恰好为 \(i\) 的方案数。

\(n \le 250\),提交记录:https://codeforces.com/problemset/problem/715/E

分析

首先考虑两个排列的距离就是 \(p_i \to q_i\) 连边后图的 \(n - c\)\(c\) 为环数,考虑计数不同的图。

考虑将图分为 \(4\) 类:

  1. \(p \to q\)
  2. \(p \to 0\)
  3. \(0 \to q\)
  4. \(0 \to 0\)

若存在 \(0 \to x, y \to 0 \land x = y\),则将其合并为一个四类边。一类边可以缩点,注意判断是否成环。

\(n_1, n_2, n_3\) 分别表示二类,三类和四类的边数。

那么考虑计数二类边形成 \(i\) 个环的方案数:

\[f_i = \displaystyle\sum_{j = i}^{n_1} \binom{n_1}{j} {j \brack i}(n_1 - j + n_3 - 1)^{\underline{n_1 - j}} \]

意义是一条二类边的归宿要么是成环,要么是将二类链和四类链合并,四类边同理。

四类边形成 \(i\) 个环的方案数不难发现为:

\[g_i = \displaystyle {n_3 \brack i} n_3! \]

因为这些边可以任意选择。

剩下的部分直接卷积起来。

时间复杂度 \(\mathcal O(n^2)\)

Code

提交记录:https://codeforces.com/contest/715/submission/225221642

posted @ 2023-10-10 19:38  JWRuixi  阅读(39)  评论(0编辑  收藏  举报