2020 SCOI online 题面记录与题解

前言

其实这玩意就是缝合怪……

D1 考的是 SCOI2018 的 D1

D2 是用 SCOI2019 D2T2 和 SCOI2018 D2T2,D2T3 拼的……

如果你刷穿 SCOI,你就能无伤切题

但是这些题对于初见的小蒟蒻来说还是很震撼的……

我两天加起来连 200 都没有……

题面

D1T1([SCOI2018] 树)

一棵树, n n n 个点,有点权, q q q 次操作,每次为两种中的一种:

  1. 修改点权
  2. 询问以某个点为起点的所有简单路径中,路径和的最大值。

n , q ≤ 1 0 5 n,q \leq 10^5 n,q105,点权绝对值 ≤ 1 0 4 \leq 10^4 104

D1T2([SCOI2018] Numazu 的蜜柑)

一棵树, n n n 个点,每个点有一个权值 v i v_i vi,问有多少个点对 ( x , y ) (x,y) (x,y) 满足:

  1. y y y x x x 的祖先
  2. v x 2 + A v x v y + B v y 2 ≡ 0 ( m o d p ) v_x^2 + Av_xv_y + Bv_y^2 \equiv 0 \pmod p vx2+Avxvy+Bvy20(modp)

n ≤ 1 0 5 n \leq 10^5 n105 v i , A , B , p ≤ 1 0 16 v_i,A,B,p \leq 10^{16} vi,A,B,p1016,保证 p p p 是质数

D1T3([SCOI2018] 星际迷航)

一个模 p p p 意义下的 m m m 维空间,上有 n n n 个奇点。

一次操作为:选择一个奇点,将你传送到你当前的点关于该奇点的对称点。

q q q 次询问,每次询问从原点开始,能不能通过操作到达指定的点。

n , q ≤ 1 0 5 n,q \leq 10^5 n,q105 m ≤ 10 m \leq 10 m10 p ≤ 1 0 8 p \leq 10^8 p108

D2T1([SCOI2019] RGB)

一棵树, n n n 个点,有边权,每个点被染色成 R,G,B \texttt{R,G,B} R,G,B 中的一种。

一个合法的点集对 ( U , V ) (U,V) (U,V) 满足:

  1. U U U 中的点必须都是 R \texttt{R} R 色或 G \texttt{G} G 色, V V V 中的点必须都是 G \texttt{G} G 色或 B \texttt{B} B 色。
  2. U U U V V V 必须均是联通的。一个点集联通定义为:从点集中任取两点,则其间路径上所有点均在点集内。
  3. 存在一个点属于 U ∩ V U \cap V UV,且 U ∪ V U \cup V UV 中任意一点离该点的距离 ≤ k \leq k k(距离即为两者路径边权和)。

问不同的合法点集对个数。答案对 1 0 9 + 7 10^9 + 7 109+7 取模。

n ≤ 2000 n \leq 2000 n2000 1 ≤ 边权 ≤ 1 0 7 1 \leq \text{边权} \leq 10^7 1边权107 k ≤ 1 0 8 k \leq 10^8 k108

D2T2([SCOI2018] 游泳池)

一个凸多边形, n n n 个顶点,每个顶点有一个 t y p = 0 / 1 typ = 0/1 typ=0/1。其内部有 m m m 个圆,半径不一定相同。现在有 t t t 天,每天从凸多边形上随机取一点,与离该点最远的顶点连线。如果该顶点 t y p = 0 typ=0 typ=0 或该线与某圆有交点,则贡献为 0,否则贡献为 1。另外,你还可以拆除一些圆,每拆除一个圆需要 k k k 天,贡献为 0。假设你拆除了 x x x 个圆,使得当前贡献期望为 p p p,则你要科学决定 x x x 和拆除的圆,来最大化 p t + k x \frac{p}{t+kx} t+kxp

n ≤ 500 n \leq 500 n500 m ≤ 50 m \leq 50 m50 t ≤ 1 0 4 t \leq 10^4 t104 k ≤ 1 0 6 k \leq 10^6 k106,坐标范围 1 0 7 10^7 107

D2T3([SCOI2018] ABNS)

一个物品集 S S S,初始为空, q q q 次操作,每次为以下三种中的一种:

  1. S S S 中增加一种物品,单位花费为 a a a,单位重量为 b b b,单位价值为 v v v
  2. 查询当总花费 ≤ A \leq A A,总花费 ≤ B \leq B B 时,总价值的最大值。(一个物品可以选任意正实数次,花费、重量、价值按比例计算)
  3. S S S 拨回到第 i i i 次操作以后的状态。(保证该操作在当前操作之前)

q ≤ 1 0 5 q \leq 10^5 q105 a , b , A , B ≤ 3 × 1 0 7 a,b,A,B \leq 3 \times 10^7 a,b,A,B3×107 v ≤ 1000 v \leq 1000 v1000

题解

D1T1

第一题好像在原比赛(SCOI2018)的时候卡空间,卡死了很多动态点分治,但是在 online 里面并没有卡。。。

没有卡,就写动态点分治呗,点分树上每个点开棵线段树维护一下到分治区域内每个点的距离就行了。时间复杂度 O ( n log ⁡ 2 n ) O(n \log^2 n) O(nlog2n)

D1T2

二次剩余。在模意义下解二次方程,解出来

v x = − A ± A 2 − 4 B 2 v y v_x = \frac{-A\pm\sqrt{A^2 - 4B}}{2} v_y vx=2A±A24B vy

所以,我们只需要求一下 A 2 − 4 B A^2 - 4B A24B 这东西模 p p p 意义的二次剩余就完事了,用 Cipolla \text{Cipolla} Cipolla 就行了。求出来以后就用 map 和 dfs 瞎搞搞。

如果没有二次剩余,那么就等同于统计 v x = v y = 0 v_x = v_y = 0 vx=vy=0

时间复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

D1T3

不会,咕咕咕

D2T1

先吐槽一句:online 里面没有取模,带上高精复杂度是不对的。

依次考虑所有绿点,分别将它视作那个中心点,这个的方案数用 dp 很好算。但是很明显会重。重的时候就是存在一些绿点联通的时候。

首先可以发现如果能够对交集连通块分类求解,那么方案数是不会重的,所以我们考虑怎么容斥可以使每个交集连通块恰被统计 1 次。

对于每个交集连通块,很明显会在每个能作为中心点且在连通块内的点处统计到一次答案,而这些点必然也形成连通块。对于一个连通块,点数减去边数恒为 1,所以我们考虑枚举每组相邻的 G \texttt{G} G 点对,计算两者均可为中心点的情况下的答案减去即可。这样就能够使得每个连通块恰好被统计 1 次。

时间复杂度 O ( n 2 ) O(n^2) O(n2)

D2T2

不会,咕咕咕

D2T3

大体思想:

二维的部分背包可以先一般化,也就是把 ( a , b , v ) (a,b,v) (a,b,v) 变成 ( 1 , b a , v a ) (1,\frac{b}{a},\frac{v}{a}) (1,ab,av)

然后就扔掉第一维,剩下两维建坐标系发现有用的点是一个凸壳。

使用一些可持久化的东西动态维护这个凸壳就行了。

具体方法和细节还不会,咕咕咕

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值