FZU ACM 联合训练 Day5总结
题解
A
题意:
给你一个字典树,让你构造一个AC自动机,也就是求每个点的fail指针。(字符集十万级大小)
口胡:
感觉跟普通AC自动机的求法差不多?其实不是很会字符串,听说用主席树和后缀数组都可以过。
有神仙会做的话麻烦指点一下老弟。
感受:
考场上根本没想这题,全被乱搞题耗死了。
B
题意:
给一张有向无权图,求所有点对最短路长度的平方和。(稠密图,点数2000级别)
题解:
乱搞题。
考虑BFS求单源最短路径,但是它是个稠密图,怎么搞才不会T勒?
用bitset维护分层闭包,复杂度 \(O(\frac{n^3}{64})\) 。
感受:
心力交瘁,无话可说。
D
题意:
给你一个无向连通图,每次可以走不超过 \(k\) 步到一个没有到过的点,求一个合法的回路, \(k \geq 3\)。
题解:
本来以为是个NP问题客串……
然而,看到 \(k \ge 3\) 还不会做?
跑一棵搜索树,从根开始黑白染色,跳着走过去走回来即可构造出一个可行解。
F
题意:
给定一个元素数为n的全集的若干个子集,对于每个子集,定义小于等于它的子集为编号比它小且被它包含的集合,求最长不降子序列的个数。(子集个数 \(\leq 2*10^5\),全集大小 \(\leq 16\) )
题解:
好一个 Data Structure You've Never Heard Of !
考虑暴力,有两种做法(我似乎当时都想到了):
- 加入顶点时,暴力更新其超集的答案,查询直接做。
- 查询答案时,暴力计算其子集的答案,加入直接做。
利用均摊思想,很显然,我们只要把全集的元素拆成两半,对于每个子集分别用一种暴力维护就好了。复杂度 $O(n * 2^{\frac{d}{2}}) $ 。
感受:
乱搞题,全场AC,但是我死也想不出来。
J
题意:
给定一个四元组间的二维顺序(一维是下标,一维是权值),求所有满足条件的四元组,大概要求平方级的复杂度。
题解:
好一个 24 Data Structures You've Ever Heard Of !
枚举24种可能的顺序,稍微剪枝一下(对序列进行取反或是转置)完只剩8种,分别想办法解决就行。
感受:
首杀!感谢Twii,感谢czhou,感谢AHSFNU。
Other
不会。会了也不想写。
全场感受
可能确实是我太菜了吧,乱搞题都不会做,给fz丢人了。