bzoj 2936 [Poi 1999] 降水 - 并查集
考虑算每一高度能储存的水的量。
如果小于等于这个高度的格子和边界连通,那么水就会流走,这一部分不能算入答案。
所以用并查集维护高度小于等于当前高度的格子的连通性。每次答案加已经找到的格子数目减去和边界连通的格子数。
时间复杂度$O(nm + V)$。(用真·并查集就是这样)
网上咋一群带个log的做法。想去loj出个加强版。
Code
/**
* bzoj
* Problem#2936
* Accepted
* Time: 56ms
* Memory: 1688k
*/
#include <bits/stdc++.h>
using namespace std;
typedef bool boolean; const int N = , V = ;
const int mov[][] = {{, }, {, }, {, -}, {-, }}; typedef class Dsu {
public:
int *f;
int *siz; Dsu() { }
Dsu(int n) {
f = new int[(n + )];
siz = new int[(n + )];
f[] = siz[] = ;
for (int i = ; i <= n; i++)
f[i] = i;
for (int i = ; i <= n; i++)
siz[i] = ;
} int find(int x) {
return (f[x] == x) ? (x) :(f[x] = find(f[x]));
} void unit(int x, int y) {
int fx = find(x);
int fy = find(y);
if (fx == fy)
return;
siz[fy] += siz[fx];
f[fx] = fy;
}
}Dsu; int n, m;
Dsu uf;
boolean found[N][N];
vector< pair<int, int> > vs[V + ]; int id(int x, int y) {
if (!x || !y || x == n + || y == m + )
return ;
return (x - ) * m + y;
} inline void init() {
scanf("%d%d", &n, &m);
uf = Dsu(n * m);
for (int i = ; i <= n; i++)
for (int j = , h; j <= m; j++) {
scanf("%d", &h);
vs[h].push_back(pair<int, int>(i, j));
}
} int cfound = , res = ;
inline void solve() {
int all = n * m;
for (int v = ; v <= V && uf.siz[uf.find()] != all; v++) {
for (int j = ; j < (signed) vs[v].size(); j++) {
int x = vs[v][j].first, y = vs[v][j].second;
found[x][y] = true, cfound++;
for (int k = ; k < ; k++) {
int nx = x + mov[k][], ny = y + mov[k][], nxid = id(nx, ny);
if (!nxid || found[nx][ny])
uf.unit(nxid, id(x, y));
}
}
res += cfound - uf.siz[uf.find()];
}
printf("%d", res);
} int main() {
init();
solve();
return ;
}
bzoj 2936 [Poi 1999] 降水 - 并查集的更多相关文章
- BZOJ.2054.疯狂的馒头(并查集)
BZOJ 倒序处理,就是并查集傻题了.. 并查集就是确定下一个未染色位置的,直接跳到那个位置染.然而我越想越麻烦=-= 以为有线性的做法,发现还是要并查集.. 数据随机线段树也能过去. //18400 ...
- 2021.08.03 BZOJ 疯狂的馒头(并查集)
2021.08.03 BZOJ 疯狂的馒头(并查集) 疯狂的馒头 - 题目 - 黑暗爆炸OJ (darkbzoj.tk) 重点: 1.并查集的神奇运用 2.离线化 题意: 给一个长为n的序列,进行m次 ...
- BZOJ 4195: [Noi2015]程序自动分析 并查集+离散化
LUOGU 1955BZOJ 4195 题目描述 在实现程序自动分析的过程中,常常需要判定一些约束条件是否能被同时满足. 考虑一个约束满足问题的简化版本:假设x1,x2,x3...代表程序中出现的变量 ...
- bzoj 2733 永无乡 - 并查集 - 线段树
永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛. ...
- bzoj 3673&3674 可持久化并查集&加强版(可持久化线段树+启发式合并)
CCZ在2015年8月25日也就是初三暑假要结束的时候就已经能切这种题了%%% 学习了另一种启发式合并的方法,按秩合并,也就是按树的深度合并,实际上是和按树的大小一个道理,但是感觉(至少在这题上)更好 ...
- bzoj 1854 游戏 二分图匹配 || 并查集
题目链接 Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的 ...
- Luogu P2391 白雪皑皑 && BZOJ 2054: 疯狂的馒头 并查集
4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq...然后就咕咕了qwq 今天看到了 疯狂的馒头 ,发现一毛一样OvO.. ...
- 【BZOJ 3674】可持久化并查集加强版&【BZOJ 3673】可持久化并查集 by zky 用可持久化线段树破之
最后还是去掉异或顺手A了3673,,, 并查集其实就是fa数组,我们只需要维护这个fa数组,用可持久化线段树就行啦 1:判断是否属于同一集合,我加了路径压缩. 2:直接把跟的值指向root[k]的值破 ...
- 【BZOJ】3673: 可持久化并查集 by zky & 3674: 可持久化并查集加强版(可持久化线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3674 http://www.lydsy.com/JudgeOnline/problem.php?id ...
随机推荐
- iOS UI进阶-1.0 Quartz2D
概述 Quartz 2D是一个二维绘图引擎,同时支持iOS和Mac系统.Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF ...
- RESTful 和RPC
RESTful 全称是 Resource Representational State Transfer 即资源表现状态转换 通俗来说就是 资源在网络中以某种表现形式进行状态转移 RPC 全称是Rem ...
- OEMCC13.2 添加监控目标
1.需求描述 2.添加数据库目标 2.1 部署AGENT 2.1.1 直接安装方式 2.1.2 离线安装方式 2.1.3 命令行安装方式 2.2 添加集群资源 2.3 添加数据库 3.添加 ...
- Android -- 实现RecyclerView可拖拽Item
1,今天和大家一起实现RecyclerView可拖拽Item,主要是使用RecyclerView结合ItemTouchHelper来实现的,来看一下效果 2,看一下怎么实现的呢,很简单,只需要给rec ...
- eclipse设置字体_字符编码_快捷键
eclipse设置字体.字符编码.快捷键 1.设置字体: preferences->general->appearnce->colors and fonts-->basic-- ...
- html5-css渐变色
div{ width: 300px; height: 100px; margin: 50px; padding: 50px; border:5px groove rgba ...
- .net nancy
官网 文档 入门教程 参考
- sql 表中删除字段重复的行
Id Email UserName1 Taiseer.Joudeh@hotmail.com TaiseerJoudeh2 Hasan.Ahmad@mymail.com ...
- c++学习笔记(六)- vector使用和内存分配
-----------------------------2019/01/15------------------------------- 复习了下迭代器,其实c++参考里讲的很清楚,主要需要辨析规 ...
- eclipse 安装和使用AmaterasUML
1. 安装AmaterasUML前,需要先安装GEF(Eclipse Graphical Editing Framework (GEF)) 采用eclipse在线安装方式安装就好. a. 查看ecli ...