Contest 987

A

开个 map 记录一下。数组

时间复杂度 \(O\left(1\right)\)spa

B

根据咱们的常识,在正整数范围内,除了如下几个特例,其它状况都是指数较大值较大。code

  • \(2^4=4^2\)
  • \(1^x<x^1\left(x>1\right)\)
  • \(2^3<3^2\)

而后就作完了,时间复杂度 \(O\left(1\right)\)class

C

树状数组裸题,枚举中间点。遍历

若是拓展到四个或更多位置的话用个 DP \(f_i,j\) 表示第 \(i\) 个位置强制,目前选了 \(j\) 个位置的最小值。而后用树状数组一样维护 \(j-1\) 的状况就行了。map

时间复杂度 \(O\left(n\log n\right)\)im

D

发现 \(k\) 很小,考虑从它入手。img

以每种商品做为起点 BFS(注意可能有多个起点),这样就能算出每一个点到每种商品的最短距离。di

而后对于每一个点取出最近的 \(s\) 种货物就行了,时间复杂度 \(O\left(km+ns\log s\right)\)时间

E

策神的题的弱化版。

交换显然会更改逆序对个数的奇偶性,但可不能够作到线性呢?

首先题目中进行的操做次数都是 \(O\left(n\right)\) 级别的(虽然没什么用),这启发咱们能够模拟交换的过程。

咱们枚举每个 \(i\),若是 \(a_i\not=i\) 就交换 \(a_{a_i}\)\(a_i\)

直接理解起来可能会有一点点抽象,画个图来看看。

由于是个排列,因此 \(i\)\(a_i\) 连边会造成一个个有向环。

每次交换咱们都会使得 \(a_{a_i}=a_i\),此后 \(a_i\) 位置不会再进行交换。

由于一共有 \(n\) 个数,因此最多交换 \(n\) 次。

时间复杂度 \(O\left(n\right)\)

F

虽然边数不少(同枚举子集的 \(3^n\) 级别),但咱们并不关注具体的连边状况,咱们只关心连通问题。

考虑创建 \(2^n\) 个辅助点,向它们子集中 \(1\) 个数刚好\(1\) 的点连边。

好比说 \(\texttt{1101}\) 就向 \(\texttt{0101 1001 1100}\) 连边。

固然给定的 \(m\) 个点都要向 \(\left(2^n-1\right)\oplus a_i\) 连边。

而后这个连通性又比较优美,每次 dfs 下去确定能遍历到整个连通块。

因此访问过的点就不用访问了,总时间复杂度 \(O\left(2^n\times n\right)\)

本质是经过分层的方式在保证连通的状况下缩减了多余的边数。

相关文章
相关标签/搜索