CodeForces 1109F. Sasha and Algorithm of Silence's Sounds
题目简述:给定一个$n \times m$的二维矩阵$a[i][j]$,其中$1 \leq nm \leq 2 \times 10^5$,矩阵元素$1 \leq a[i][j] \leq nm$且互不相等。一个区间$[l, r]$是【好】的,如果所有在$[l, r]$范围内的元素(在平面上)构成了一棵树。求【好】区间$[l, r](1 \leq l \leq r \leq nm)$的个数。
解:code
建模:
令$G = (V, E)$表示二维矩阵$a[i][j]$对应的无向图,构造如下:
1. $ V = \{ 1, 2, \dots, nm \}, $
2. $ E = \{ (a[x_1][y_1], a[x_2][y_2]): (x1,y1)-(x2,y2) \in \{ (0, 1), (0, -1), (-1, 0), (1, 0) \} \}. $
注意到这个图的特殊性,即每个点的度数都$\leq 4$。
令$G_{l, r} = (V_{l, r}, E_{l, r})$表示$G$中包含节点$[l, r]$的子图,形式上,
1. $V_{l, r} = V \cap [l, r], $
2. $E_{l, r} = E \cap [l, r]^2. $
一个区间$[l, r]$是【好】的,如果$G_{l, r}$是一棵树。
对每个$1 \leq r \leq nm$,令$l_r$表示最小的$l$,使得$G_{l, r}$是无环图。则显然有$l_r \leq l_{r+1}$。
对每个$r$,我们需要求出$l_r$,可以用 Link-Cut Tree 在$O(nm \log nm)$的复杂度内做到。
令$c_{l, r}$表示$G_{l, r}$的 连通块/连通分支 (Connected Component) 的个数。
观察:$G_{l, r}$是一棵树,当且仅当$l_r \leq l \leq r$且$c_{l, r} = 1$。
因此,对每个$r$,只需统计$l \in [l_r, r]$中满足$c_{l, r} = 1$的个数。
现在我们考虑$c_{\cdot, r-1}$与$c_{\cdot, r}$的关系。
假设已知$l \in [l_r, r-1]$的$c_{l, r-1}$,设$(x, r) \in E_{l_r, r}$,则$l_r \leq x \leq r$,增加$(x, r)$这条边后,会将$x$与$r$所在的连通块合并,从而使$l \in [l_r, x]$时$G_{l, r}$比$G_{l, r-1}$的连通块个数,于是
$$ c_{l, r} = c_{l, r-1}+1 - \sum_{(x, r) \in E_{l_r, r}} [x \geq l]. $$
这个可以用线段树来维护:从$c_{l, r-1}$到$c_{l, r}$的过程,需要
1. 区间$[l_r, r]$整体$+1$。
2. 对$(x, r) \in E_{l_r, r}$,区间$[l_r, x]$整体$-1$。
其中,线段树节点维护的信息有:区间最小值,以及区间最小值出现的次数。
时间复杂度为$O(nm \log nm)$。
CodeForces 1109F. Sasha and Algorithm of Silence's Sounds的更多相关文章
- Codeforces 1109F - Sasha and Algorithm of Silence's Sounds(LCT)
Codeforces 题面传送门 & 洛谷题面传送门 讲个笑话,这题是 2020.10.13 dxm 讲题时的一道例题,而我刚好在一年后的今天,也就是 2021.10.13 学 LCT 时做到 ...
- Codeforces Round #539 (Div. 1) 1109F. Sasha and Algorithm of Silence's Sounds LCT+线段树 (two pointers)
题解请看 Felix-Lee的CSDN博客 写的很好,不过最后不用判断最小值是不是1,因为[i,i]只有一个点,一定满足条件,最小值一定是1. CODE 写完就A,刺激. #include <b ...
- [CF1109F]Sasha and Algorithm of Silence's Sounds
题意 有一个\(n*m\)的网格,每个格子有一个数,为\(1\)~\(n * m\)的排列 一个区间\((1<=l<=r<=n*m)\)是好的,当且仅当:数值在该区间内的格子,构成一 ...
- CF1109F Sasha and Algorithm of Silence's Sounds LCT、线段树
传送门 构成一棵树可以分成两个限制:图不成环.图的点数-边数=1. 我们考虑枚举右端点\(r\)计算所有可能的左端点\(l\)的答案.我们先考虑第一个限制:图不成环.注意到当\(r\)确定的时候,满足 ...
- Codeforces 1109D. Sasha and Interesting Fact from Graph Theory
Codeforces 1109D. Sasha and Interesting Fact from Graph Theory 解题思路: 这题我根本不会做,是周指导带飞我. 首先对于当前已经有 \(m ...
- Codeforces 832A. Sasha and Sticks
It's one more school day now. Sasha doesn't like classes and is always bored at them. So, each day h ...
- CodeForces 86D(Yandex.Algorithm 2011 Round 2)
思路:莫队算法,离线操作,将所有询问的左端点进行分块(分成sqrt(n) 块每块sqrt(n)个),用左端点的块号进行排序小的在前,块号相等的,右端点小的在前面. 这样要是两个相邻的查询在同一块内左端 ...
- CodeForces 718C Sasha and Array
线段树. 线段树维护区间矩阵和,操作都是最简单的线段树.$lazy$标记不要记录乘了几次,直接记录乘了几次之后的矩阵就可以了,不然每次下传的时候再算一遍时间复杂度会提高. #pragma commen ...
- Codeforces 1109D Sasha and Interesting Fact from Graph Theory (看题解) 组合数学
Sasha and Interesting Fact from Graph Theory n 个 点形成 m 个有标号森林的方案数为 F(n, m) = m * n ^ {n - 1 - m} 然后就 ...
随机推荐
- php部分:网页中报表的打印,并用CSS样式控制打印的部分;
网页中报表的打印,是通过调用window对象中的print()方法实现打印功能的: 调用浏览器本身的打印功能实现打印 <a href="#" onclick="wi ...
- HttpClient 访问 https 出现peer can't
package util; import java.security.cert.CertificateException; import javax.net.ssl.SSLContext;import ...
- 九度OJ 1036:Old Bill (老比尔) (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2691 解决:1432 题目描述: Among grandfather's papers a bill was found. 72 ...
- 使用active mq
1 windows下使用active mq 1.1 下载active mq 1.2 点击根目录\bin\win64\activemq.bat运行 1.3 登陆查看 http://localhost:8 ...
- 前端几个笔试题及答案(bd)
1. 行内元素.块级元素和空元素(void)举例. 块级元素:<address>.<caption>.<dd>.<div>.<dl>.& ...
- clone和dup
ruby中clone和dup都是对一个对象的浅拷贝,其区别如下: 1.clone会拷贝单例方法,而dup不会. a = Object.new def a.hello "hello" ...
- Django 模型层--单表
ORM 简介 MTV或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这可以大大的减少了开 ...
- mySql执行效率分析
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: 机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试, ...
- (C)位字段(bit-field)
位字段(bit-field) 在存储空间很宝贵的情况下,有可能需要将多个对象保存在一个机器字中,一种常用的方法是:使用类似于编译器符号表的单个二进制位标志集合,外部强加的数据格式(如设备接口等寄存器) ...
- 20145239 杜文超 实验四 Android开发基础
20145239实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理 ...