A - Tim and BSTs
做法
- 经典的树 DP 问题。
- \(dp[u][i]\) 表示考虑以 u 为根子树,u 的 rank 为 i 方案数。
- 关于 \(dp[u][]\) 的计算,枚举左子树有几个比根小的,枚举右子树有几个数字比根小。合并两棵子树的复杂度为 \(O(sz_1 * sz_2)\),因此可以 \(O(n^2)\) 计算答案。
B - A Historic Discussion
C - Influence on Social media
做法
- 预处理所有合法的数字,合法的数字一定是 \(p^k\) 形式,其中 \(k+1\) 为质数。
- 注意排序输出。
E - Black Money Island
做法
- 问题转化为给一个图,有白边和黑边,问是否存在恰有 k 条黑边的生成树。
- 第一眼带权二分......... 有点憨憨。
- 口胡一个引理:对于任意一棵包含黑边数最少的生成树 \(T_1\),存在一棵包含极多黑边的生成树 \(T_2\),使得 \(T_1\) 中的黑边是 \(T_2\) 中黑边的子集。
- 口胡一个证明:考虑 \(T_1\) 中黑色的非树边,逐条添加,加上后得到一个环,如果环上存在白边,删除白边,如果不存在,删除刚添上的黑边。
- 问题就好做了。
F - Notes and GPS Chips
G - Hawala Arrests
做法
- 考虑树是根链的 case,问题是个经典的序列上贪心问题:序列上,选择极少的点,使得每个区间至少包含一个点。
- 把连通块的根当成右端点即可。
- 不会证明。
H - Netcoin Verification
I - Mancunian Hoards Black Money
J - Bob vs ATM
做法
- 根据括号序列建树。
- 删除一段相当于删除子树,树上删边游戏。