先总结一下。
①你说这是CSP-S难度的?
②你说我旁边是谁?一堆天天跪着膜拜的神仙……
好消息是一分没挂,因为我只打满了暴力
毫无悬地拿了rk 1(显然是倒数的),人均
300
300
300(当然除了我)。
Solution
T1
这题并不是很难,大约TG D2T2难度,可为什么没想到……
首先,我们将这些关键点从小到大排序。可以发现,任何区间覆盖的都是一段连续的关键点。于是,我们将这些区间转化为“覆盖的关键点的区间”,可以说不仅完成了离散化,也完成了一个重要的转化,一举两得。
然后,我们考虑 d p dp dp。状态设计 d p i dp_i dpi表示覆盖到了第 i i i个关键点,当前看到的区间为 [ l , r ] [l,r] [l,r],那么状态转移为 d p i = ∑ j = l − 1 r − 1 d p j dp_i=\sum_{j=l-1}^{r-1} dp_j dpi=j=l−1∑r−1dpj
为什么呢?可以发现,当前的区间 [ l , r ] [l,r] [l,r]可以与之前的 l − 1 l-1 l−1到 r − 1 r-1 r−1拼接起来。
但是,可以发现: 假设我们选定了一些区间,完成了覆盖的要求;还剩余一些区间,这些区间都是珂选珂不选的。所以,对于每一个区间 [ l , r ] [l,r] [l,r],我们还要将区间 [ r , i n f ] [r, inf] [r,inf]全部乘上一个 2 2 2。
于是,我们将左端点按升序排序,左端点相同按右端点也升序排序,我们就得到了本题的标准错误解法。 可以发现,在这种排序方式下,
d
p
dp
dp是有后效性的。比如,
n
=
3
,
m
=
4
,
a
=
[
1
,
3
]
[
1
,
4
]
[
1
,
4
]
n=3, m=4, a={[1,3][1,4][1,4]}
n=3,m=4,a=[1,3][1,4][1,4]就可以Hack掉你。
即,在选完 [ 1 , 4 ] [1,4] [1,4]后,那个 [ 1 , 3 ] [1,3] [1,3]是珂选珂不选的;但是,我们先扫描到了 [ 1 , 3 ] [1,3] [1,3],先对 [ 3 , 4 ] [3,4] [3,4]这个区间作了统乘的操作,没有任何效果,因为0乘上啥都是自己。而如果在左端点相同的情况下,按右端点降序排序呢?这个时候就没有任何问题了。注意对于一个区间,先区间乘法,再区间查询(查询 ∑ i = l − 1 r − 1 d p i \sum_{i=l-1}^{r-1}dp_i ∑i=l−1r−1dpi的值),再单点修改即可。
相当于我们只需要维护三种操作:
①区间乘法
②区间求和
③单点修改
我们可以采用线段树中“先乘再加”的 l a z y t a g lazytag lazytag的方法即可维护,详见洛谷模板线段树 2 2 2。
时间复杂度 O ( n l o g n + m ) O(nlogn+m) O(nlogn+m)。
只要想到第一步的转化,后面每走一步都是套路,这题就得到了解决。谁叫我这么菜呢……
sto yzhang orz!
T2
这么水的题不仅没切掉,还打了个暴力,也真是醉了。比赛的时候把题目一直看错了……太菜了……
Lemma1: 一个强连通分量重的任何两个节点都不能在一次轰炸中被同时选择。
很显然,根据定理,强连通分量中任何两个节点都可以互相到达。
Lemma2: 一个DAG的答案是其最长链的长度。
学习一下
p
m
t
pmt
pmt鸽鸽的思维方式:
①答案的下界为最长链的长度。因为最长链上任何两个节点都不能在一次轰炸中被同时选择。
②答案的上界也是最长链的长度。因为选最长链上一个节点的同时,我们可以同时选择横生的枝蔓。根据最长链的最长性,在贪心的情况下这些枝蔓一定不会在最长链被轰炸完毕后再被轰炸。
所以,答案就是其最长链。直接拓扑排序转移即可。
结合这两个引理,我们得到了最终的答案:
⌊ \lfloor ⌊ 整个有向图的最长链,但是重复经过的边只算一次 ⌋ \rfloor ⌋
直接缩点,然后按照 L e m m a 2 Lemma\ 2 Lemma 2末尾所说的方法做即可。
时间复杂度 O ( n + m ) O(n+m) O(n+m)。sto pmt orz!
T3
先轻喷一下这个毒瘤超纲出题人。
Subtask 1: 大力转移,时间复杂度 O ( n 2 ) O(n^2) O(n2),期望得分 20 20 20分
假设 u − > v u->v u−>v有一条边,那么对于所有到 u u u的边,假设其长度为 d i s dis dis,那么到 v v v之后长度就会变成 d i s + 1 dis+1 dis+1。
所以,我们考虑套路的 d p dp dp: 设 d p i , j dp_{i,j} dpi,j表示从某个节点到 i i i,且长度为 j j j的链的数量。
状态转移十分显然,略。
Subtask 2: 二项式定理推公式,巧妙转化;时间复杂度 O ( n k 2 ) O(nk^2) O(nk2),期望得分50分
首先,可以发现一个东西:
∑
i
=
1
r
(
a
i
+
1
)
k
\sum_{i=1}^r (a_i+1)^k
∑i=1r(ai+1)k
=
∑
i
=
1
r
∑
j
=
0
k
C
k
i
a
i
j
=\sum_{i=1}^r \sum_{j=0}^k C_{k}^i a_i^j
=∑i=1r∑j=0kCkiaij
=
∑
j
=
0
k
C
k
j
∑
i
=
1
r
a
i
j
=\sum_{j=0}^k C_k^j \sum_{i=1}^r a_i^j
=∑j=0kCkj∑i=1raij
于是,我们转变一下状态设计: d p i , j dp_{i,j} dpi,j表示从某个节点到 i i i,距离的 j j j次方的和。
然后,我们每次按照上述转移方式转移即可。
下面的内容过于超纲,就不放了。
sto gh orz!
T4
一道让全场爆 0 0 0的神仙题……