洛谷11月月赛 Dev.2 简要题解

T2
题意:
给定 n n n个点 m m m条边的无向简单联通图 G G G,边有边权,保证没有重边和自环
定义一条简单路径的权值为路径上所有边边权的异或和
保证 G G G中不存在简单环使得边权异或和不为 0 0 0
Q Q Q次询问 x x x y y y的最短简单路径

善于利用题目条件的你发现一个环走哪一边都是可以的,于是按输入顺序求出任意一棵生成树即可


T3:
题意:一个序列 B B B,从第一个位置开始,每次可以跳到一个 j ∈ [ i , i + m ] , b j > 0 j\in [i,i+m],b_j>0 j[i,i+m]bj>0 j j j,走不动的为输,问先手必胜? B B B A A A 中的 [ l , r ] [l,r] [l,r] n ≤ 1 e 6 , q ≤ 1 e 7 n\le 1e6,q\le 1e7 n1e6,q1e7

暴力从后向前解 s g sg sg 函数
考虑一个点 i i i,如果向后 m [ i + 1 , i + m ] [i+1,i+m] [i+1,i+m] s g sg sg 存在一个 0 即必败情况,那么当前必胜
如果全部是 1 且当前是奇数,那么你死定了, s g sg sg 为 0,否则 s g sg sg 为 1

我们巧妙的发现如果是偶数那么一定为 1,而如果 i i i 是 0,那么下一个出现 0 的位置至少在 [ i − m − 1 , i ] [i-m-1,i] [im1,i] 之后并且一个点 i i i 向前到的那个节点是一定的
先处理出连续一段偶数的最前面的那个点,然后一个处理一个点向前面跳到的那个点,倍增优化,跳到刚好在 l l l 之前的那个点判断其是否为 l l l 即可, O ( ( n + q ) l o g ( n ) ) O((n+q)log(n)) O((n+q)log(n))

发现最后可以连成一棵树,问题转化为对每个点求它到根的路径上存不存在一类点
d f s dfs dfs 保留一条链的信息退栈的时候删除即可


T4:
题意:给一个 { a 1 , a 2 , . . . , a n } , { w 1 , w 2 , . . . , w n } \{a_1,a_2,...,a_n\},\{w_1,w_2,...,w_n\} {a1,a2,...,an},{w1,w2,...,wn}
一个 x x x 初始为 0,每次可以给一个 x x x 加上 j ∈ [ − k , k ] j\in[-k,k] j[k,k]
记第 i i i 次的结果是 b i b_i bi,要求 b i ≤ a i b_i\le a_i biai,最大化 ∑ i b i w i \sum_i b_iw_i ibiwi
n ≤ 1 e 6 n\le 1e6 n1e6

首先发现加上一个负的很烦,可以考虑每次操作将当前全部减 k k k,然后在 [ 0 , 2 k ] [0,2k] [0,2k] 讨论

有一个比较巧妙的转换,就是将每一次加的操作的贡献独立开来
其实就是一个比较常见的拆贡献的套路,记第 i i i 次加的数是 c i ∈ [ 0 , 2 k ] c_i\in[0,2k] ci[0,2k]
m a x ( ∑ b i w i ) = m a x ( ∑ i = 1 n w i ∗ ∑ j = 1 i c j ) = ∑ j = 1 n c j ∑ i = j n w i max(\sum b_iw_i)=max(\sum_{i=1}^nw_i*\sum_{j=1}^ic_j)=\sum_{j=1}^nc_j\sum_{i=j}^nw_i max(biwi)=max(i=1nwij=1icj)=j=1ncji=jnwi
w w w 的后缀和是 s s s,就是最大化 ∑ c i s i \sum c_is_i cisi 同时满足 ∀ i , ∑ j ≤ i c j ≤ a i + i ∗ k \forall i,\sum_{j\le i}c_j\le a_i+i*k i,jicjai+ik
后面的可以一开始就是加上

显然先取 s i s_i si 更大的最优,直接贪心,按 s i s_i si 从大到小排序
考虑 a i a_i ai 的限制,每次能取到的就是后缀的一个最小值,把它砍成 0 0 0,并且之后的讨论只能在这个位置之后,可以线段树维护最小值以及区间加,也可以记一个全局减的 t a g tag tag 一开始求一个后缀 m i n min min 就可以了,复杂度 O ( n ) O(n) O(n)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FSYo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值