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. RCU原理分析

    简介 RCU(Read-Copy Update)是数据同步的一种方式,在当前的Linux内核中发挥着重要的作用.RCU主要针对的数据对象是链表,目的是提高遍历读取数据的效率,为了达到目的使用RCU机制 ...

  2. leetcode 206 反转链表 Reverse Linked List

    C++解法一:迭代法,使用前驱指针pre,当前指针cur,临时后继指针nxt: /** * Definition for singly-linked list. * struct ListNode { ...

  3. HTTPS 证书制作及使用

    一 证书的制作 进入jdk/bin,使用keytools.exe制作证书. 1.创建keystore 创建一个别名为serverkeystore的证书,该证书存放在名为server.keystore的 ...

  4. RocketMQ 消费者

    本文分析 DefaultMQPushConsumer,异步发送消息,多线程消费的情形. DefaultMQPushConsumerImpl MQClientInstance 一个客户端进程只有一个 M ...

  5. 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_8 properties标签的使用及细节

    properties 可以把数据库链接的配置放在上面的properties里面 #{占位符}的形式去引用上面的.下面的内容就是引用上面的内容的定义. 运行查询的方法测试一下 这样改造可以成功的运行程序 ...

  6. bigdata数据分析(二):关闭防火墙&安装telnet

    先检查CentOS7.0是否已经安装以下两个安装包:telnet-server.xinetd.命令如下: rpm -qa telnet-server rpm -qa xinetd 如果没有安装,则先安 ...

  7. vue--综合组件间的通信

    二.综合组件之间的通信 实现一个ToDoList. ①完成所有的组件的创建和使用 ②add点击add按钮时候,将用户输入的内容(todoinput),显示在(todolist) 核心代码:兄弟组件间通 ...

  8. jmeter函数介绍(1)

    1._Random() 随机数 The minimum value allowed for a range of values:输入一个最小值: The maximum value allowed f ...

  9. LeetCode.868-二进制距离(Binary Gap)

    这是悦乐书的第333次更新,第357篇原创 01看题和准备 今天介绍的是LeetCode算法题中Easy级别的第203题(顺位题号是868).给定正整数N,找到并返回N的二进制表示中两个连续1之间的最 ...

  10. Ubuntu 16.04 设置静态IP 注意事项

    目录 查看动态ip下的网络信息 查看默认网关 设置静态网络 查看动态ip下的网络信息 1 ifconifg # 查看网卡信息: 可以看出网口名称为 eno1, 以及子网掩码(mask) 查看默认网关 ...