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
n≤1e6,q≤1e7
暴力从后向前解
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]
[i−m−1,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
bi≤ai,最大化
∑
i
b
i
w
i
\sum_i b_iw_i
∑ibiwi
n
≤
1
e
6
n\le 1e6
n≤1e6
首先发现加上一个负的很烦,可以考虑每次操作将当前全部减 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=1nwi∗∑j=1icj)=∑j=1ncj∑i=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,∑j≤icj≤ai+i∗k
后面的可以一开始就是加上
显然先取
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)