WC2021 菊蒻yxy的题解

[WC2021] 括号路径

显然 如果 a a a 可以到达 b b b ,则有 b b b 可以到 a a a

我们考虑从小的括号序列开始找 当存在边 ( a , b , w ) (a,b,w) (a,b,w) ( c , b , w ) (c,b,w) (c,b,w) 都为左括号

那么就有 a − > b − > c a->b->c a>b>c 构成一个合法序列 ​所以 a , c a,c a,c 互相可以到达

此时就可以把 a , c a,c a,c 缩成一个点 用并查集实现,并维护每一个集合指向它且为左括号的边和当前 s i z e size size

再用新的并查集来当中介去合并新的点

具体实现时 按置合并边(同类型边放一起 用 m a p map map )。当一个并查集当中介时 它的同类型的边对应的点可以合并 所以一个合并可能会引起另一个合并,把它们放入队列处理,队列中存合并操作。

时间复杂度 O ( m log ⁡ m ) O(m\log m) O(mlogm) 期望得分100

[WC2021] 表达式求值

考虑一列一列处理 把矩阵每一列分别计算 相当于求解

  • 给定数组 A 0 , . . . , A m − 1 A_0,...,A_{m-1} A0,...,Am1,那么对应的 2 t 2^t 2t 个表达式的和是多少?

首先建出表达式树 子节点为值 A i A_i Ai 非子节点为 < , > , ? <,>,? <,>,?

然后在树上 d p dp dp

S S S 是存数组下标的集合, x x x 是树上的一个节点, s u m x sum_x sumx x x x 子树所有的方案数, l l l x x x 左子树, r r r x x x 右子树

状态 d p ( S , x ) dp(S,x) dp(S,x) 表示:在任意 i ∈ S i\in S iS j ∉ S j\notin S j/S A i > A j A_i>A_j Ai>Aj 的情况下, x x x 出算出来的结果是 A i A_i Ai i ∈ S i\in S iS )的方案数

那么很容易得到转移方程

  • x =   ′ > ′ x=\ '>' x= >

    d p ( S , x ) = d p ( S , l ) × s u m r + ( s u m x − d p ( S , l ) ) × d p ( S , r ) dp(S,x)=dp(S,l)\times sum_r+(sum_x-dp(S,l))\times dp(S,r) dp(S,x)=dp(S,l)×sumr+(sumxdp(S,l))×dp(S,r)

  • x =   ′ < ′ x=\ '<' x= <

    d p ( S , x ) = d p ( S , l ) × d p ( S , r ) dp(S,x)=dp(S,l)\times dp(S,r) dp(S,x)=dp(S,l)×dp(S,r)

  • x =   ′ ? ′ x=\ '?' x= ?

    d p ( S , x ) = d p ( S , l ) × s u m r + ( s u m x − d p ( S , l ) ) × d p ( S , r ) + d p ( S , l ) × d p ( S , r ) dp(S,x)=dp(S,l)\times sum_r+(sum_x-dp(S,l))\times dp(S,r)+dp(S,l)\times dp(S,r) dp(S,x)=dp(S,l)×sumr+(sumxdp(S,l))×dp(S,r)+dp(S,l)×dp(S,r)

求得所有的 d p ( S , x ) dp(S,x) dp(S,x) 后 我们开始计算最后的 a n s ans ans

A 0 , A 1 , A 2 . . . A m − 1 A_0,A_1,A_2...A_{m-1} A0,A1,A2...Am1 排完序后得到 A p 0 , A p 1 , . . . A p m − 1 A{p_0},A{p_1},...A_{p_{m-1}} Ap0,Ap1,...Apm1

答案就是

a n s = ∑ i = 0 m − 1 A p i × (   d p ( { p 0 , p 1 , . . . , p i } , r o o t ) − d p ( { p 0 , p 1 , . . . , p i − 1 } , r o o t )   ) ans=\sum_{i=0}^{m-1}A{p_i}\times(\ dp(\{p_0,p_1,...,p_{i}\},root)-dp(\{p_0,p_1,...,p_{i-1}\},root) \ ) ans=i=0m1Api×( dp({ p0,p1,...,pi},root)dp({ p0,p1,...,pi1},root) )

时间复杂度 O ( 2 m ∣ E ∣ + n p o l y ( m ) ) O(2^m∣E∣+npoly(m)) O(2mE+npoly(m)) 期望得分100

[WC2021] 斐波那契

呜呜呜呜呜我对这类题过敏啊呜呜呜

您们好好学数学了吗 呜呜我没有我只会看题解

题解 P7325 【[WC2021] 斐波那契 大佬的题解

orz orz 扑通扑通跪下来

你可能感兴趣的:(WC2021 菊蒻yxy的题解)