废话
今天居然水了个不错的排名?
但是坑点也不少,不然应该还可以往前水水qwq
坑点嘛,比如,评测用了subtask。。。
正题
T1
【题目大意】
有一张
n
n
n个点
m
m
m条边的图,有
k
k
k个操作,每次在之前的基础上删除一条边,每次删除后需要你输出这张图相对于原图,其中有多少个点到1的最短距离发生了改变。
【样例输入】
5 6 5
1 2
1 3
4 2
3 2
2 5
5 3
5
2
4
1
3
【样例输出】
0
2
2
4
4
【数据规模】
1
≤
n
≤
1
0
5
1 \leq n \leq 10^5
1≤n≤105
1
≤
m
≤
2
×
1
0
5
1 \leq m \leq 2 \times 10^5
1≤m≤2×105
1
≤
k
≤
m
1 \leq k \leq m
1≤k≤m
【题解】
很神奇,我的做法又跟题解不一样,但是ZZY和我的搞法是类似的。
最短路嘛,首先想到用SPFA来搞,发现SPFA不支持删边,于是考虑将删边看为加边,操作反着来即可。一开始构图的时候先不加删掉的边,然后跑SPFA,然后反着一条一条边加进去,每加一条边后,看这条边连着的两个点谁离1更近,然后把·11更近的点放到栈里面跑一次SPFA即可。如果都走不到1,那么就不跑SPFA。
很优秀,但是subtask4T掉了 1 3 \frac 1 3 31的点,于是整个subtask的分都没了,最后只捞到60分。(贼气
这个做法可以优化,但是我没想到会T,所以没写优化。
可惜的是ZZY想到了优化,但是深搜写挂了qwq
优化是这样的:如果这条边连接的两个点中有一个到1的距离已经是最短的了,那么就把这个点放到栈里面跑SPFA,如果不是没有点的距离是最短的,那么下面也必定不能将别的点更新成最短的,那么答案就不会变化,所以此时就不用做。
T2
【题目大意】
有一个字符串序列,由P、O、I三种字符构成,现在要你再插入一个字符(P或O或 I),使得这个序列中包含尽可能多的’POI‘字序列,问最多能包含几个?
【样例输入】
5
POIOI
【样例输出】
6
【数据规模】
n ≤ 1 0 7 n \leq 10^7 n≤107
【题解】
大水题。
P只可能放在最前面,I只可能放在最后面,然后O考虑放中间,放在某一个位置的贡献是前面的P的数量乘后面的I的数量,这些情况里面取个最大值即可。
这道题简直是魔鬼,最后一个subtask的最后一个点会爆long long,要用高精度,导致我直接没了20分。
T3
【题目大意】
有n个石头,每个石头有 a a a, b b b两个属性,假如相邻的两块石头的 a a a属性的 gcd \gcd gcd大于 1 1 1,那么这两块石头可以抵消掉并产生两块石头b属性的和的贡献,现在问能产生的最大贡献是?
【样例输入】
6
9 11
8 19
6 12
5 17
6 18
3 15
【样例输出】
64
【数据规模】
1
≤
n
≤
6000
1 \leq n \leq 6000
1≤n≤6000
1
≤
a
i
≤
1
0
9
1 \leq a_i \leq 10^9
1≤ai≤109
1
≤
b
i
≤
1
0
6
1 \leq b_i \leq 10^6
1≤bi≤106
对于
n
≥
800
n \geq 800
n≥800的数据,有这样一个性质:
【题解】
显然可以写出一个 n 3 n^3 n3的 d p dp dp,定义 f [ i ] [ j ] = t r u e f[i][j]=true f[i][j]=true表示 i i i~ j j j区间可以全部抵消。
但是 d p dp dp对于 n ≥ 800 n \geq 800 n≥800的数据会超时,于是我们考虑从大到小枚举 l l l,对于满足 f [ l + 1 ] [ r − 1 ] = t r u e f[l+1][r-1]=true f[l+1][r−1]=true且 gcd ( a l , a r ) > 1 \gcd(a_l,a_r)>1 gcd(al,ar)>1的 r r r,从 l l l连一条边到 r r r,然后从每个左端点出发dfs一遍就能得到答案。
说实话我也没看懂特殊性质,所以不知道为什么这个做法的时间复杂度是 O ( c × n 2 × l o g ( n ) + n 2 ) O(c \times n^2 \times log(n)+n^2) O(c×n2×log(n)+n2)的,只能坑着了。
今天前两题挺容易,但是第三题的性质真的很迷。。
下午讲了个扫描线,学过,不难。
临走前看到了李建老师的奖状之类的东西,辅导指导老师
,真的是很厉害。
明天最后一场,希望有个好成绩!