• CodeForces 1109F. Sasha and Algorithm of Silence's Sounds


    题目简述:给定一个$n imes m$的二维矩阵$a[i][j]$,其中$1 leq nm leq 2 imes 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)$。

  • 相关阅读:
    网络记事本第八天
    软件工程第十周总结
    网络记事本第六,七天
    网络记事本开发,第四天
    网络记事本开发第二,三天
    leetcode 198 打家劫舍
    leetcode 46 全排列
    设计模式 之 动态代理
    设计模式 之 静态代理
    设计模式 之 桥接模式
  • 原文地址:https://www.cnblogs.com/TinyWong/p/10405580.html
Copyright © 2020-2023  润新知