B 的数据范围有点不正常,马上想到 2^k 枚举,但是 m 非常大。想了好久才想到只用保留 m=n-1,可能慢了(真的吗,可能就几分钟,但相比于有些题是直觉秒出满了很多)。哦,我会 O(nk2^k\log(nk)),好像不行。能不能去做树形 DP 而不是跑 Kruskal 呢?想到了切成若干连通块,但是 k 个特殊点放到一起做好像不行啊。哎不是,我咋还自己发明最小生成树新算法了,似乎发明出来就要拿 xx 奖了,放弃了。(虽然说发现自己发明一些常见问题的更优算法是大概率大概率就可以 skip 这个想法,但是本题树拼上菊花的最小生成树确实有不用并查集的线性做法)。好像可以 DFS 加特殊点。归并排序一下然后跑 Kruskal,O(n2^k\alpha(n)),写。感觉会挂就上对拍。花了十分钟,怎么过去这么久了,快 16:00 了。被 B 硬控了,有点慌。
C 很快想到了中间一段不同的要对应上,两边是前缀关系。我竟然在这种情况下没能马上发现 Trie 上祖先关系,是个二维数点,鉴定为压力过大。不过好在马上发现了可以给一个串上可持久化 Trie 放另一个串(本质和二维数点,遍历第一棵树,在第二棵树做加法,第二棵树暴力查是一样的,只是一个离线一个可持久化)。复杂度 26len,写+调,花了好久。Bug 可持久化插入写错了,以及没注意到询问在 Trie 上跳到空节点就 break。跑的还算比较快,似乎 17:40 了。不过想 C 的时候看了几分钟 D,所以没有特别慌。