刷(shui)题记录 2021.10 [2]

[ARC111-C] Too Heavy

⇒ \Rightarrow 原题链接

首先判断无解:
∃ i ∈ [ 1 , N ] , p i ≠ i 且 b p i ≥ a i ⇔ 无解 \exists i \in [1, N], p_i \ne i \text{且} b_{p_i} \ge a_i \Leftrightarrow \text{无解} i[1,N],pi=ibpiai无解

接下来用 p i p_i pi 建个图 ∀ i ∈ [ 1 , N ] , i → p i \forall i \in [1, N], i \rightarrow p_i i[1,N],ipi

对于某个联通块 C C C ,一定是一个环,以任何一个 a a a 最大的节点作为起始节点,得到一个便利序列 l   ( ∣ l ∣ = ∣ V C ∣ ) l~(|l| = |V_C|) l (l=VC),可以构造方案:
l 1 ↔ l 2 l 1 ↔ l 3 ⋯ l 1 ↔ l n \begin{aligned} &l_1 \leftrightarrow l_2\\ &l_1 \leftrightarrow l_3\\ &\cdots\\ &l_1 \leftrightarrow l_n \end{aligned} l1l2l1l3l1ln

然后所有联通块的方案拼起来就行了。

[ARC114-C] Sequence Scores

⇒ \Rightarrow 原题链接

考虑对于一个确定的序列 A A A 怎么求出 f ( A ) f(A) f(A) 值。

对于值 x x x ,设其在序列 A A A 的出现位置序列为 l A ( x ) l_A(x) lA(x) ,位置从小到大排,特别的 l A ( x ) 0 = 0 l_A(x)_0=0 lA(x)0=0。其对 f ( A ) f(A) f(A) 的贡献显然可以这样求:

考虑向一个序列 A A A 的末尾添入一个值,变为 A ′ A' A,假设当前需要添入 x x x ,分情况讨论:

  • 序列 A A A 没有 x x x ,那么 f ( A ′ ) : = f ( A ) + 1 f(A') := f(A) + 1 f(A):=f(A)+1
  • 序列 A A A 中最后一个 x x x 个位置为 p p p f ( A ′ ) : = f ( A ) + [ min ⁡ i = p + 1 ∣ A ∣ { A i } < x ] f(A') := f(A) + \left[\min_{i = p + 1} ^ {|A|}\{A_i\} < x\right] f(A):=f(A)+[mini=p+1A{Ai}<x]

f ( n ) f(n) f(n) 表示所有长度为 n n n 的序列的得分和, g ( n , x ) g(n, x) g(n,x) 表示长度为 n n n ,最后一个值为 x x x 之后的位置的值都大于 x x x 的序列个数。

那么可以得到:

g ( n , x ) = ∑ i = 1 n m i − 1 ( m − x ) n − i f ( n ) = ∑ i = 1 m f ( n − 1 ) + m n − 1 − g ( n − 1 , i ) \begin{aligned} &g(n,x)=\sum_{i=1}^n m^{i-1} (m-x)^{n-i}\\ &f(n)=\sum_{i=1}^m f(n-1)+m^{n-1} - g(n-1,i) \end{aligned} g(n,x)=i=1nmi1(mx)nif(n)=i=1mf(n1)+mn1g(n1,i)

[ARC115-D] Odd Degree

⇒ \Rightarrow 原题链接

考虑一个连通图 C C C 的答案。

如果 K K K 是奇数,那么 A N S \rm{ANS} ANS 必然为 0 0 0 ,只用考虑 2 ∣ K 2 \mid K 2K 的情况。

首先想一棵树的情况:考虑确定所有节点的度数奇偶性,从叶子结点开始向上确定每一条边是否选择,可以发现选择方案是确定的,因此对于一棵树而言:
A N S K = ( ∣ V C ∣ K ) \mathrm{ANS}_K=\binom{|V_C|}{K} ANSK=(KVC)

接下来考虑一般情况,首先随便弄一棵生成树,然后对于非树边,随便选择一些,然后再确定节点的度数奇偶性,发现对于树边,其选择方案一定是确定的,因此有:

A N S K = ( ∣ V C ∣ K ) 2 ∣ E C ∣ − ∣ V C ∣ + 1 \mathrm{ANS}_K=\binom{|V_C|}{K} 2^{|E_C|-|V_C|+1} ANSK=(KVC)2ECVC+1

对于所有联通块,用背包对答案进行合并,合并方法可以用类似树形背包的方法,可以做到 O ( n 2 ) O(n^2) O(n2)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值