期望得分:80+100+0
实际得分:70+80+0
rk:18
A. 公园
T1连续爆炸篇
第一眼拓扑,发现要存状态,定义了个dp,脑子糊了不知道怎么处理多起点多终点,觉得十分不可做。然后发现可以记忆化,然而不会打。
于是盯了40分钟,想了各种乱七八糟的东西,卡T1慌得一批。为了缓和下,滚去T2。
打完T2回来还是没什么可A的复杂度,然后打了个O(mv^2)每个起点拓扑跑了。
正解:建虚点S,T
S向入口连边,权值为排队时间,出口类似。然后就只需要跑一遍拓扑。O(v^2)
定义dp[i][j]为到i点的链长为j的最短时间,拓扑更新即可。
以上其实是网络流建图的常用套路,然而考试大脑短路。
B. 计划
简化:给定序列ai,q个[k,l]的询问,回答[k,l]中所有满足区间中不同数的个数>=m的子区间[i,j]的j-i之和。
第一眼莫队,发现区间可以转移,[l,r]->[l,r+1]的答案增量为以r+1为右端点的所有满足>=m限制且左端点坐标>=l的等差数列之和。
性质:
- 如果[l,r]中有>=m个不同的数,那么[l-1,r],[l,r+1]同样满足
- [l,r]->[x,r+1],x一定>=l,换言之在右端点递增时左端点单调不降
定义pre[i]表示以i为右端点,最大的满足限制的左端点。
suf[i]表示以i为左端点,最小的满足限制的右端点。
那么[l,r]->[l,r+1],能形成贡献的左端点范围为[l,pre[r]],等差数列求和即可。
复杂度$\Theta(n+q \sqrt{n})$
然而乘法运算没ll,WA80,跟O(qn)暴力一个分。。。
正解:
拆式子,维护变量。
对于所有询问[l,r]按r排序,然后把r的合法答案放到pre[r]上,用树状数组维护,回答查询>=k处的和。
C. 抽卡
不会