T1:
所有不互质的数对一定在同一集合内。
并查集维护每个数所在集合,以数对为链合并。
但是这样复杂度为$O(n^2)$的。
考虑优化,两个数不互质,意味着他们之间有相同质因子,把每个数分解质因数,和他的质因子合并即可。
线筛处理出最小质因子后可以$O(logn)$求所有质因子。
时间复杂度$O(nlogn)$。
T2:
考虑状压,设数组$dp[i][j]$,表示经过$i$条路径,经过路径状态为$j$的情况存不存在。
时间复杂度$O(nm2^d)$,需要优化。
折半搜索,先DP前一半,再DP后一半,枚举中间点拼和起来即可。
时间复杂度$O(nm2^{d/2}+n2^d)$
T3:
正解是一个大模拟。
将点与点之间的位移看成线段,那么所有满足$x_i=x_{i-1}$或$x_{i-1}<x_i<x_{i+1}$或$x_{i-1}>x_i>x_{i+1}$的点都可以删掉。
用链表维护没有被删掉的点即可。
将每次的位移线段处理出来,压入堆中,将所有询问离线排序,从小到大枚举,每次将长度小于当前长度的线段扔掉,将上下两条线段合并,首位处要特判。
然而细节很多不是很好写。
时间复杂度$O(nlogn)$
原文地址:https://www.cnblogs.com/hz-Rockstar/p/11619476.html
时间: 2024-11-14 05:56:07