T2
题意:
给定 nnn个点mmm条边的无向简单联通图GGG,边有边权,保证没有重边和自环
定义一条简单路径的权值为路径上所有边边权的异或和
保证GGG中不存在简单环使得边权异或和不为 000
QQQ次询问xxx到yyy的最短简单路径
善于利用题目条件的你发现一个环走哪一边都是可以的,于是按输入顺序求出任意一棵生成树即可
T3:
题意:一个序列 BBB,从第一个位置开始,每次可以跳到一个 j∈[i,i+m],bj>0j\in [i,i+m],b_j>0j∈[i,i+m],bj>0 的 jjj,走不动的为输,问先手必胜?BBB 取 AAA 中的 [l,r][l,r][l,r],n≤1e6,q≤1e7n\le 1e6,q\le 1e7n≤1e6,q≤1e7
暴力从后向前解 sgsgsg 函数
考虑一个点 iii,如果向后 m [i+1,i+m][i+1,i+m][i+1,i+m] 的 sgsgsg 存在一个 0 即必败情况,那么当前必胜
如果全部是 1 且当前是奇数,那么你死定了,sgsgsg 为 0,否则 sgsgsg 为 1
我们巧妙的发现如果是偶数那么一定为 1,而如果 iii 是 0,那么下一个出现 0 的位置至少在[i−m−1,i][i-m-1,i][i−m−1,i] 之后并且一个点 iii 向前到的那个节点是一定的
先处理出连续一段偶数的最前面的那个点,然后一个处理一个点向前面跳到的那个点,倍增优化,跳到刚好在lll 之前的那个点判断其是否为 lll 即可,O((n+q)log(n))O((n+q)log(n))O((n+q)log(n))
发现最后可以连成一棵树,问题转化为对每个点求它到根的路径上存不存在一类点
dfsdfsdfs 保留一条链的信息退栈的时候删除即可
T4:
题意:给一个 {a1,a2,...,an},{w1,w2,...,wn}\{a_1,a_2,...,a_n\},\{w_1,w_2,...,w_n\}{a1,a2,...,an},{w1,w2,...,wn}
一个 xxx 初始为 0,每次可以给一个 xxx 加上 j∈[−k,k]j\in[-k,k]j∈[−k,k]
记第 iii 次的结果是 bib_ibi,要求 bi≤aib_i\le a_ibi≤ai,最大化 ∑ibiwi\sum_i b_iw_i∑ibiwi
n≤1e6n\le 1e6n≤1e6
首先发现加上一个负的很烦,可以考虑每次操作将当前全部减 kkk,然后在 [0,2k][0,2k][0,2k] 讨论
有一个比较巧妙的转换,就是将每一次加的操作的贡献独立开来
其实就是一个比较常见的拆贡献的套路,记第 iii 次加的数是 ci∈[0,2k]c_i\in[0,2k]ci∈[0,2k]
max(∑biwi)=max(∑i=1nwi∗∑j=1icj)=∑j=1ncj∑i=jnwimax(\sum b_iw_i)=max(\sum_{i=1}^nw_i*\sum_{j=1}^ic_j)=\sum_{j=1}^nc_j\sum_{i=j}^nw_imax(∑biwi)=max(∑i=1nwi∗∑j=1icj)=∑j=1ncj∑i=jnwi
记 www 的后缀和是 sss,就是最大化 ∑cisi\sum c_is_i∑cisi 同时满足∀i,∑j≤icj≤ai+i∗k\forall i,\sum_{j\le i}c_j\le a_i+i*k∀i,∑j≤icj≤ai+i∗k
后面的可以一开始就是加上
显然先取 sis_isi 更大的最优,直接贪心,按 sis_isi 从大到小排序
考虑 aia_iai 的限制,每次能取到的就是后缀的一个最小值,把它砍成 000,并且之后的讨论只能在这个位置之后,可以线段树维护最小值以及区间加,也可以记一个全局减的 tagtagtag 一开始求一个后缀 minminmin 就可以了,复杂度 O(n)O(n)O(n)

本文深入解析了算法竞赛中的几个关键问题,包括最短路径、序列分析、加权贡献和资源分配策略。通过巧妙的数学转换和贪心算法,文章提供了解决这些问题的有效方法,如生成树、动态规划和线段树等高级数据结构的应用。
375

被折叠的 条评论
为什么被折叠?



