模拟赛题解9.13

E

题目大意

F i F_i Fi 表示斐波那契额数列的第 i i i 项,其中 F 1 = 0 , F 2 = 1 F_1=0, F_2=1 F1=0,F2=1
一个数 n n n k k k 好的当且仅当存在一个单调不降的序列 a 1 … k a_{1\dots k} a1k ,使得 n = ∑ i = 1 k F a i n=\sum_{i=1}^k F_{a_i} n=i=1kFai 。给定 T T T k k k ,对于每一个 k k k ,求出最小的, k k k 好的数,结果对 998244353 998244353 998244353 取模。

题解

找规律。
实际上 A N S k = F 2 k + 4 \mathrm{ANS}_k = F_{2k+4} ANSk=F2k+4 ,用快速幂+矩阵加速即可

G

题目大意

给定一个 n n n 个点, m m m 条边的联通无向图,接下来有 q q q 次操作,每次操作有两种:

  • 1   u   v \texttt{1 u v} 1 u v : 在节点 u , v u,v u,v 之间连接一条新的边。
  • 2   u   v \texttt{2 u v} 2 u v : 询问从 u u u v v v 的所有路径的边的交的大小。

每个数据点最多 10 10 10 组数据。

1 ≤ n , m , q ≤ 1 × 1 0 5 1\leq n, m, q\leq 1\times 10^5 1n,m,q1×105

题解

一定要使用快读。

可以首先建立一颗生成树,每加入一条非树边以及新加入的边,假设为 ( u , v ) (u,v) (u,v),都可以认为 u , v u,v u,v 的树上路径上的所有边都不会对之后的所有询问产生贡献,这一部分可以用路径覆盖+路径覆盖量查询完成。但是不能直接用 树链剖分和线段树 做,因为时间复杂度多了一个 log ⁡ 2 n \log_2 n log2n ,但是可以使用并查集做到均摊 O ( n ) O(n) O(n)

H

题目大意

给定一颗 n n n 个点,边有边权,点有点权的无根树,选择一条路径 u → v u\rightarrow v uv,使得 w u − ∑ e ∈ P a t h ( u → v ) w e − w v w_u -\sum_{e\in \mathrm{Path(u\rightarrow v)}}w _e - w_v wuePath(uv)wewv 。求这个最大值。

每个数据点最多 10 10 10 组数据。

1 ≤ n ≤ 1 0 5 1\leq n\leq 10^5 1n105

题解

一定要使用快读。

使用 dp \texttt{dp} dp
f ( u , 0 ) = max ⁡ { max ⁡ v ∈ s o n ( u ) { f ( v , 0 ) − w ( u , v ) } w u f ( u , 1 ) = min ⁡ { min ⁡ v ∈ s o n ( u ) { f ( v , 1 ) + w ( u , v ) } w u a n s = max ⁡ u = 1 n { f ( u , 0 ) − f ( u , 1 ) } \begin{aligned} f(u,0) &= \max\begin{cases} \max_{v\in \mathrm{son}(u)} \{f(v, 0)-w_{(u,v)}\}\\ w_u \end{cases}\\ f(u,1) &= \min\begin{cases} \min_{v\in \mathrm{son}(u)} \{f(v,1)+w_{(u,v)}\}\\ w_u \end{cases}\\ \mathrm{ans}&=\max_{u=1}^n\{f(u,0)-f(u,1)\} \end{aligned} f(u,0)f(u,1)ans=max{maxvson(u){f(v,0)w(u,v)}wu=min{minvson(u){f(v,1)+w(u,v)}wu=u=1maxn{f(u,0)f(u,1)}

你可能感兴趣的:(题解,算法)