T1 密码破译(password )
- 题目大意
- 给定一个字符串,多次询问[L,R]的串中最短循环节大小
- N≤500000,Q≤2000000
- 题解
- 询问[1,n]就是kmp的经典应用了,所以暴力复杂度为O(QN)
- 当我们判断循环节长度len时要求[L,L+len−1]=[R−len+1,R]
- 对于一个串[L,R]它本身肯定是自己的一个循环节,然后枚举它的每一个质因子,判断合法即可
- CODE
T2 寝室管理(dormitory)
- 题目大意
- 给定一棵树或一个外向基环树,询问包含≤k个点的路径条数
- 题解
- 一棵树的时候之间点分治——50pt
- 主要说下外向基环树吧
- 常见的外向基环树([BZOJ1040] [ZJOI2008]骑士)我们是拆掉一条环上的边,然后处理树和删掉的边的影响
- 这道题,去掉一条环边后,我们将所有环上的边标记一下
- 从每个点
x
开始
DFS ,处理出 DFS 到的点 y到x 路径上的点数 num1 ,以及路径上经过环边的个数 num2 - 若经过了环边,则这两点间的路径有两条
- num1≥k时ans+1
- num1+环上点数−2∗num2≥k时ans+1
- 这样暴力复杂度是 O(N2)
- 点分代替暴力即可~
- CODE