模拟测试54

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