Problem A
Solved by Water_sheep. 00:39 (+)
题意:
- 咕咕咕
题解:
- 咕咕咕
Problem B
Unsolved.
Problem C
Unsolved.
Problem D
Upsolved by purple_bro.
题意:
- 给你一个 $n$ 个点 $m$ 条边的无向图,每条边有边权,让你删去一些边,使得 $\sum\limits_{i=1}^{n}\sum\limits_{j=i+1}^{n} d(i,j)$ 最小,$d(i,j)$ 表示 $i$ 到 $j$ 的最短路。$n \le 14$
题解:
- 显然最后肯定是要删成一棵树,那考虑做一个生成树状压 dp,$dp[S][i]$ 表示点集 $S$ 里面的点连通,并且此时根为 $i$ 的最大贡献。
- 那么转移就是枚举 $S$ 的子集 $T$ ,考虑做一个合并。
- $dp[S][i] = max(dp[S][i], dp[T][j] + dp[S - T][i] + dis[i][j]\times|T|\times|n-T|)$
- 优化一点常数,然后记得判 $j$ 是否在点集 $T$ 中。
Problem E
Upsolved by purple_bro.
题意:
- 给一棵无根树,然后依次再给出 $m$ 个点,给出的点 $k_i$ 表示以 $k_i$ 为根建一棵有根树,然后再在每个结点挂上 $T(k_{i-1})$,这样就建成了一棵 $T(k_i)$,对于给出的每个点顺序回答这棵有根树的最大独立集。
题解:
- 树的最大独立集有个贪心取法,每次取叶子,然后父亲都不取,依次取到根。
- 那么对于每棵有根树 $T$ 我们能用树 dp 预处理出以 $k_i$ 为根时根取不取,假设 $T(k_{i-1})$ 取了,那 $T(k_i)$ 就不能取(因为 $T(k_{i-1})$ 挂在每个结点),否则通过预处理的 dp 确定根有没有取。
- $g[i]$ 表示以 $i$ 为根时 $i$ 点取不取,$f[i]$ 表示 $i$ 的父亲取不取,$O(n)$ 可解决。
- $T(k_{i-1})$ 根取了,$ans = preans \times n$
- $T(k_{i-1})$ 根没取,$ans = preans \times n + $ 原树最大独立集
Problem F
Solved by purple_bro. 01:02 (+)
题意:
- 求 $\sum\limits_{i=1}^{n} \sum\limits_{i=1}^{n} \mu(gcd(i, j))$ $n \le 10^7$。
题解:
- 化简得 $\sum\limits_{T=1}^{n}\lfloor \frac{n}{T} \rfloor ^2 \sum\limits_{d|T} \mu(d)\mu(\frac{T}{d})$ ,后面是一个狄利克雷卷积的形式,$\mu$ 是积性函数,卷起来也是积性函数,线性筛大力筛。
- Div1 是一个 $n \le 10^{10}$ 的版本, $\mu \ast \mu \ast I \to\mu \ast \epsilon\to\mu$, 然后就是两个杜教筛大力搞。
Problem G
Solved by Water_sheep. 01:21 (+)
题意:
- 咕咕咕
题解:
- 咕咕咕
Problem H
Solved by Robin_Lo. 02:16 (+)
题意:
- 咕咕咕
题解:
- 咕咕咕
Problem I
Solved by Water_sheep. 03:57 (+4)
题意:
- 咕咕咕
题解:
- 咕咕咕
Problem J
Upsolved by purple_bro.
题意:
- 给你 $n$ 个字符的加入顺序,字符插入位置在原字符串的每个字符中间,求把字符都插完后的字符串中不同的子序列个数。
题解:
- 比如 $abc$,最后的字符串是 $cbcacbc$,那我们可以考虑倒着做另一种插法,
- $c$
- $cbc$
- $cbcacbc$
- 问题就变成了两个字符串合并之后有多少个不同的子序列。
- 一个 $dp$:
if (s[i + 1] == k) dp[i + 1][k] = 1 + sum(dp[i][1 ~ 26])
else dp[i + 1][k] = dp[i][k]
- 所以我们就可以构造出 $26$ 个矩阵来进行转移,复杂度 $O(nm^3)$。