有一个 \(n \times m\) 矩阵,初态下全是 \(0\)。

如果两个相邻元素(四连通)相等,我们就说它们是连通的,且这种关系可以传递。

有 \(q\) 次操作,每次指定一个位置 \((x_i,y_i)\) 把它替换为 \(c_i\)。

每次操作后求这个矩阵有多少个连通块。

\(q \leq 2\times 10^6\), \(n,m \leq 300\)

Solution

带删除的并查集问题可以离线,所以正着倒着各做一次,然后将答案做差就可以了

考虑正着做的过程,刚开始就是一块 \(0\) 的板板

每次我们创建一个新节点,然后试图将它与周围的节点合并,设合并的次数为 \(t\),那么这一次对答案的贡献(即这次操作新增了多少个连通块)就是 \(1-t\)

反向操作时同理,贡献带个负号就可以了

最后输出答案的时候,把贡献数组求个前缀和即可

#include <bits/stdc++.h>
using namespace std; const int N = 305, M = 2000005;
int a[N][N],n,m,q,ind,num,f[M*2],ans[M],id[N][N]; struct query {
int x,y,b,c;
} s[M]; int find(int x) {return (x==f[x])?x:f[x]=find(f[x]);}
void merge(int x,int y) {if((x=find(x))-(y=find(y))) f[x]=y,--num;} void solve(int x,int y) {
if(a[x][y]==a[x-1][y]) merge(id[x][y],id[x-1][y]);
if(a[x][y]==a[x+1][y]) merge(id[x][y],id[x+1][y]);
if(a[x][y]==a[x][y-1]) merge(id[x][y],id[x][y-1]);
if(a[x][y]==a[x][y+1]) merge(id[x][y],id[x][y+1]);
} signed main() {
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=q;i++) {
int x,y,c;
scanf("%d%d%d",&x,&y,&c);
s[i]={x,y,a[x][y],c};
a[x][y]=c;
}
memset(a,0xff,sizeof a);
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) a[i][j]=0;
for(int i=1;i<=q;i++) {
if(s[i].b!=s[i].c) {
int x=s[i].x,y=s[i].y,b=s[i].b,c=s[i].c;
num=1;
a[x][y]=c;
id[x][y]=++ind;
f[ind]=ind;
solve(x,y);
ans[i]+=num;
}
}
ind=0;
memset(f,0,sizeof f);
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) {
id[i][j]=++ind;
f[ind]=ind;
}
for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) solve(i,j);
for(int i=q;i>=1;--i) {
if(s[i].b!=s[i].c) {
int x=s[i].x,y=s[i].y,b=s[i].c,c=s[i].b;
num=1;
a[x][y]=c;
id[x][y]=++ind;
f[ind]=ind;
solve(x,y);
ans[i]-=num;
}
}
ans[0]=1;
for(int i=1;i<=q;i++) ans[i]+=ans[i-1];
for(int i=1;i<=q;i++) printf("%d\n",ans[i]);
}

[CF1303F] Number of Components - 并查集,时间倒流的更多相关文章

  1. CF-292D Connected Components 并查集 好题

    D. Connected Components 题意 现在有n个点,m条编号为1-m的无向边,给出k个询问,每个询问给出区间[l,r],让输出删除标号为l-r的边后还有几个连通块? 思路 去除编号为[ ...

  2. 并查集+时光倒流 || [JSOI2008]星球大战starwar || BZOJ 1015 || Luogu P1197

    题面:P1197 [JSOI2008]星球大战 题解: 坑点有点多啊,加上我本来就有点头昏脑涨,一道水题写了一万年.. 并查集不支持拆开(但是可以撤销合并),只支持合并.所以把询问离线了,从最后状态到 ...

  3. hihocoder 1066 无间道之并查集

    #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息……额,说远了,总之,小Hi和小H ...

  4. [hihoCoder]无间道之并查集

    题目大意: #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息……额,说远了,总之, ...

  5. acm专题--并查集

    题目来源:http://hihocoder.com/problemset/problem/1066 #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256M ...

  6. 【BZOJ 4025】 (CDQ?还是整体二分?+并查集及它的恢复操作)

    4025: 二分图 Description 神犇有一个n个节点的图.因为神犇是神犇,所以在T时间内一些边会出现后消失.神犇要求出每一时间段内这个图是否是二分图.这么简单的问题神犇当然会做了,于是他想考 ...

  7. POJ2985 The k-th Largest Group (并查集+treap)

    Newman likes playing with cats. He possesses lots of cats in his home. Because the number of cats is ...

  8. hiho #1066 : 无间道之并查集

    #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息……额,说远了,总之,小Hi和小H ...

  9. HihoCoder第十四周:无间道之并查集

    #1066 : 无间道之并查集 时间限制:20000ms 单点时限:1000ms 内存限制:256MB 描述 这天天气晴朗.阳光明媚.鸟语花香,空气中弥漫着春天的气息--额,说远了,总之,小Hi和小H ...

随机推荐

  1. DeBug Python神级工具PySnooper

    安装 pip3 install pysnooper import pysnooper @pysnooper.snoop() def number_to_bits(number): if number: ...

  2. 06_TypeScript泛型

    1.泛型的定义 泛型就是解决 类,接口 方法的复用性,以及对不特定数据的支持(类型校验). 2.泛型函数 //T 表示泛型,具体什么类型是调用这个方法的时候决定的, //T可以用其他大写字母表示,传入 ...

  3. 单元测试-xUnit总结

    xUnit总结 什么是xUnit xUnit.net是针对.NET Framework的免费,开源,以社区为中心的单元测试工具. 自动化测试的优点 可以频繁的进行测试 可以在任何时间进行测试,也可以按 ...

  4. Spring有哪些配置方式

    1.XML 配置文件. Bean 所需的依赖项和服务在 XML 格式的配置文件中指定.这些配置文件通常包含许多 bean 定义和特定于应用程序的配置选项.它们通常以 bean 标签开头.例如: < ...

  5. leaflet结合geoserver利用WFS服务实现图层新增功能(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  6. Python爬虫实战教程:爬取网易新闻;爬虫精选 高手技巧

    前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. stars声明很多小伙伴学习Python过程中会遇到各种烦恼问题解决不了.为 ...

  7. php ip转换省市县

    http://www.cz88.net/ip/ http://www.ttlsa.com/php/php_cunzhen-ipdata/ # wget h http://6.scdx3.crsky.c ...

  8. P1967 货车运输【LCA】【生成树】

    题目描述 A 国有 nn 座城市,编号从 11 到 nn,城市之间有 mm 条双向道路.每一条道路对车辆都有重量限制,简称限重. 现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的 ...

  9. Excel_b_1

    1.Excel简介 数据处理软件,lotus兼容(文件,选项,高级,拉到底,lotus,) 2.Excel功能 数据存储,数据处理,数据分析,数据呈现 3.具体功能 重新认识了Excel,选项,高级选 ...

  10. spring security之web应用安全

    一.什么是web应用安全,为了安全我们要做哪些事情? 保护web资源不受侵害(资源:用户信息.用户财产.web数据信息等)对访问者的认证.授权,指定的用户才可以访问资源访问者的信息及操作得到保护(xs ...