APIO2019 题解

T1 奇怪装置

题目传送门

https://loj.ac/problem/3144

题解

很容易发现,这个东西一定会形成一个环。我们只需要求出环的长度就解决了一切问题。

设环的长度为 \(l\)。那么从 \((0, 0)\) 出发,走 \(l\) 步一定可以再次回到 \((0, 0)\)。

也就是说
\[
\left\{
\begin{align*}
& A \mid l + \lfloor \frac lB \rfloor\\
& B \mid l
\end{align*}
\right.
\]
所以 \(\lfloor \frac lB \rfloor = \frac lB\)。因此设 \(x = \frac lB\),则 \(l = xB\),则 \(A \mid x(B + 1)\)。

所以 \(x = \frac{\operatorname{lcm}(A, B + 1)}{A(B + 1)}\),\(l = xB = \frac{\operatorname{lcm}(A, B + 1)B}{A(B + 1)}\)。

有了 \(l\) 之后就是求区间的并的大小了。这个东西可以直接排序一遍就可以了。

代码

https://loj.ac/submission/688026


T2 桥梁

题目传送门

https://loj.ac/problem/3145

题解

先考虑这样一种做法:

首先如果我们暴力把当前的所有点权大于等于 \(w_j\) 的边加入并查集,那么这次询问的答案就是 \(s_j\) 所在并查集的大小。

这样是 \(O(Qm)\) 的。

想要把这个暴力改的稍微优雅一点可以这样:

先找出所有没有被修改过的边加入并查集。

对于每一次询问,枚举所有修改,对于在它之前最后一次修改这条边的一次修改,如果修改后的权值大于等于 \(w_j\) 就加入并查集。这里的并查集需要回退。

这样的时间复杂度变成了 \(O(m\log m + Q^2\log m)\)。

我们发现,这样做涉及到的边只有询问的边。我们是不是可以每隔几次询问就暴力重构一遍来保证目前没有被重构的询问尽量少呢?这样做可以看成把询问分成很多块。

如果采用这样的策略,那么我们每一次询问只需要遍历这一块内的修改即可。

那么这样的时间复杂度就是 \(O(\frac{Qm\log m}B + QB)\)。

当 \(B = \sqrt{m\log m}\) 时最优。

这样的时间复杂度就是 \(O(Q\sqrt{m\log m})\)。

代码

https://loj.ac/submission/688889


T3 路灯

题目传送门

https://loj.ac/problem/3146

题解

对于每个点 \(x\) 维护其所在段的右边界 \(r_x\)。那么从 \(a\) 能够到达 \(b\) 当且仅当 \(r_a \geq b\)。

可以用树套树维护 \(r_i\)。对于一次 toggle 操作,不管是点亮还是熄灭,影响到的 \(r_i\) 都只有这个区间的修改点 \(x\) 左边的部分,内容是把它们的 \(r\) 修改成 \(x\) 或者从 \(x\) 修改成一个更大的。

同时,可以发现,一个路段在 \(i\) 时刻通了,那么它可以带来贡献 \(q - i\) 的时间。如果在 \(j\) 时刻断了,那么它带来了 \(q - i\) 的负贡献。我们只需要维护这个这个东西就可以了。

所以树套树的第一维是 \(i\),第二维是 \(r_i\),存储的是 \(r_i\) 变成 \(j\) 的贡献。但是需要特判的是,如果查询的时候路段处于联通状态,那么需要从总贡献中扣除 \(q - now\)。

听说还可以用 cdq 分治维护,应该也是差不多的做法了。

代码

https://loj.ac/submission/688370

APIO2019 题解的更多相关文章

  1. APIO2019题解

    T1.桥梁(bridges/restriction) Subtask1:暴力,$O(n^2)$. #include<cstdio> #include<algorithm> #d ...

  2. APIO2019简要题解

    Luogu P5444 [APIO2019]奇怪装置 看到这种题,我们肯定会想到\((x,y)\)一定有循环 我们要找到循环节的长度 推一下发现\(x\)的循环节长为\(\frac{AB}{B+1}\ ...

  3. 题解-APIO2019路灯

    problem \(\mathtt {loj-3146}\) 题意概要:一条直线上有 \(n+1\) 个点和 \(n\) 条道路,每条道路连通相邻两个点.在 \(q\) 个时刻内,每个时刻有如下两种操 ...

  4. 题解-APIO2019桥梁

    problem \(\mathrm {loj-3145}\) 题意概要:给定一张 \(n\) 点 \(m\) 边的无向图,边有边权,共 \(q\) 次操作,每次会将第 \(x\) 条边的权值改为 \( ...

  5. 题解-APIO2019奇怪装置

    problem loj-3144 题意概要:设函数 \(f(t)\) 的返回值为一个二元组,即 \(f(t)=((t+\lfloor \frac tB\rfloor)\bmod A, t\bmod B ...

  6. 题解 洛谷 P5443 【[APIO2019]桥梁】

    考虑若只有查询操作,那么就可以构造\(Kruskal\)重构树,然后在线询问了,也可以更简单的把询问离线,把询问和边都按权值从大到小排序,然后双指针依次加入对于当前询问合法的边,用并查集维护每个点的答 ...

  7. 【LOJ#3146】[APIO2019]路灯(树套树)

    [LOJ#3146][APIO2019]路灯(树套树) 题面 LOJ 题解 考场上因为\(\text{bridge}\)某个\(\text{subtask}\)没有判\(n=1\)的情况导致我卡了\( ...

  8. 【LOJ#3145】[APIO2019]桥梁(分块,并查集)

    [LOJ#3145][APIO2019]桥梁(分块,并查集) 题面 LOJ 题解 因为某个\(\text{subtask}\)没判\(n=1\)的情况导致我自闭了很久的题目... 如果没有修改操作,可 ...

  9. 【LOJ#3144】[APIO2019]奇怪装置(数论)

    [LOJ#3144][APIO2019]奇怪装置(数论) 题面 LOJ 题解 突然发现\(LOJ\)上有\(APIO\)的题啦,赶快来做一做. 这题是窝考场上切了的题嗷.写完暴力之后再推了推就推出正解 ...

随机推荐

  1. cmake使用2

    CMake支持大写.小写.混合大小写的命令. . 添加头文件目录INCLUDE_DIRECTORIES 语法:include_directories([AFTER|BEFORE] [SYSTEM] d ...

  2. Python Module_oslo.vmware_连接 vCenter

    目录 目录 前言 Install oslsvmware How to use the vSphere Web Service SDK 前言 oslo.vmware 是一个由 Python 实现的 vC ...

  3. 11 ORA-8102:Index Corruption解析

    11 ORA-8102:Index Corruption解析 [oracle@DSI ~]$ oerr ora 810208102, 00000, "index key not found, ...

  4. IntlliJ IDEA 注册码获取或离线破解

    JB 的软件还是挺好用的,建议有钱的话支持正版.. IntelliJ IDEA 有开源版,但是要想玩企业级开发,还是得用收费版. 不管哪种方式,使用前都需要把"0.0.0.0 account ...

  5. cobbler批量安装系统

    cobbler是一个可以实现批量安装系统的Linux应用程序.它有别于pxe+kickstart,cobbler可以实现同个服务器批量安装不同操作系统版本. 1.系统环境准备及其下载cobbler 1 ...

  6. Linux基本服务

    一.Samba服务 1.下载samba yum install samba -y 2.配置samba文件 vim /etc/samba/smb.conf [ken]path = /test    #等 ...

  7. ftp搭建mysql服务器

    一.将mysql放入FTP服务器中1.安装FTP    yum install -y vsftpd2.准备ftp主目录    mkdir /var/ftp/mysql57/3.官网下载yum仓库的包. ...

  8. Arm-linux-gcc-4.3.2安装步骤 (转)

    http://blog.chinaunix.net/uid-26119896-id-3302233.html 安装交叉编译工具链: 1.首先以root用户登入 2.复制arm-linux-gcc-4. ...

  9. Bubble Sort(冒泡排序)

    冒泡排序(英语:Bubble Sort,台湾另外一种译名为:泡沫排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行 ...

  10. 在laravel框架中使用mq

    本文写于2018-11-28 1.部署laravel项目 https://github.com/laravel/laravel  通过git克隆项目,或者下载zip包然后解压等方式都可以把larave ...