zoukankan      html  css  js  c++  java
  • 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)$。

  • 相关阅读:
    使用 asp.net mvc和 jQuery UI 控件包
    ServiceStack.Redis 使用教程
    HTC T8878刷机手册
    Entity Framework CodeFirst 文章汇集
    2011年Mono发展历程
    日志管理实用程序LogExpert
    使用 NuGet 管理项目库
    WCF 4.0路由服务Routing Service
    精进不休 .NET 4.0 (1) asp.net 4.0 新特性之web.config的改进, ViewStateMode, ClientIDMode, EnablePersistedSelection, 控件的其它一些改进
    精进不休 .NET 4.0 (7) ADO.NET Entity Framework 4.0 新特性
  • 原文地址:https://www.cnblogs.com/TinyWong/p/10405580.html
Copyright © 2011-2022 走看看