题意:8个方向如果能够连成一块就算是一个连通块,求一共有几个连通块。

分析:网上的题解一般都是dfs,但是今天发现并查集也可以解决,为了方便我自己理解大神的模板,便尝试解这道题目,没想到过了。。。

 #include <cstdio>
#include <iostream>
#include <sstream>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <string>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <algorithm>
#define ll long long
#define mem(m, a) memset(m, a, sizeof(m))
#define repu(i, a, b) for(int i = a; i < b; i++)
#define maxn 1100
const double PI=-acos(-1.0);
using namespace std;
struct Node
{
int val, x, y;
bool operator < (const Node a)const
{
return val > a.val;
}
Node(int v=, int x=, int y=):val(v), x(x), y(y) {}
} nd[maxn*maxn];
struct Query
{
int h, id;
bool operator < (const Query a)const
{
return h>a.h;
}
Query(int h=, int id=):h(h), id(id) {}
} q[];
bool vis[maxn][maxn];
int n, m, pre[maxn*maxn];
const int dx[]= {, , -, , , , -, -};
const int dy[]= {, -, , , , -, , -};
int Find(int x)
{
if(pre[x] == -) return x;
return pre[x] = Find(pre[x]);
}
bool OK(int x, int y)
{
return x && y && x<=n && y<=m;
}
int judge(int x, int y)
{
int v[], cnt=;
for(int i=; i<; i++)///寻找他周围的四个数字是哪些集合的
{
int nx=x+dx[i], ny=y+dy[i];
if(OK(nx, ny) && vis[nx][ny])///已经遍历过的
{
int t = Find(m*(nx-)+ny);
v[cnt++] = t;
}
}
sort(v, v+cnt);
cnt = unique(v, v+cnt)-v;
for(int i=; i < cnt; i++)
pre[v[i]] = m*(x-)+y;///把筛选下来的全都归入(x,y)中
return - cnt;///返回的值也只有-1,0,1
}
int main()
{
char c[][];
int T, t, v;
while(~scanf("%d%d", &n, &m) ,n + m)
{
getchar();
int tot=;
repu(i,,n+)
gets(c[i]);
repu(i,,n+)
{
repu(j,,m)
{
if(c[i][j] == '*')
nd[tot]=Node(, i, j+);
else
nd[tot]=Node(, i, j+);
tot++;
}
}
///都是从大到小
sort(nd, nd+tot);
memset(vis, , sizeof vis);
memset(pre, -, sizeof pre);
int cnt=,j = ;
for(; nd[j].val > && j < tot; j++)
{
///如果这个点比所查询的点大,则可以加入其坐标
cnt += judge(nd[j].x, nd[j].y);
vis[nd[j].x][nd[j].y]=;
}
printf("%d\n",cnt);
}
return ;
}
/*
3 5
*@*@*
**@**
*@*@*
*/

借助的是UVA 1665 大神的模板

UVA 572 油田连通块-并查集解决的更多相关文章

  1. PAT天梯赛练习题——L3-004. 肿瘤诊断(三维连通块并查集)

    L3-004. 肿瘤诊断 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 在诊断肿瘤疾病时,计算肿瘤体积是很重要的一环.给定病灶 ...

  2. LightOJ——1012Guilty Prince(连通块并查集)

    1012 - Guilty Prince Time Limit: 2 second(s) Memory Limit: 32 MB Once there was a king named Akbar. ...

  3. 牛客练习赛39 D 动态连通块+并查集 X bitset 优化

    https://ac.nowcoder.com/acm/contest/368/D 题意 小T有n个点,每个点可能是黑色的,可能是白色的.小T对这张图的定义了白连通块和黑连通块:白连通块:图中一个点集 ...

  4. 《程序员代码面试指南》第三章 二叉树问题 Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题

    题目待续.... Tarjan算法与并查集解决二叉树节点间最近公共祖先的批量查询问题 java代码

  5. UVa 572 油田(DFS求连通块)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  6. [洛谷Luogu]P1141 01迷宫[联通块 并查集]

    题目链接 大致题意 相邻格子不同为连通,计算每个点所在的连通块大小. 想法 我采用了并查集的做法. 开一个辅助数组记录连通块大小,每次合并的时候更新父亲节点的大小即可. 一个点先与它上面的点判定,若判 ...

  7. UVA 12232 - Exclusive-OR(带权并查集)

    UVA 12232 - Exclusive-OR 题目链接 题意:有n个数字.一開始值都不知道,每次给定一个操作,I a v表示确认a值为v,I a b v,表示确认a^b = v,Q k a1 a2 ...

  8. UVA 1160 - X-Plosives 即LA3644 并查集判断是否存在环

    X-Plosives A secret service developed a new kind ofexplosive that attain its volatile property only ...

  9. uva 1493 - Draw a Mess(并查集)

    题目链接:uva 1493 - Draw a Mess 题目大意:给定一个矩形范围,有四种上色方式,后面上色回将前面的颜色覆盖,最后问9种颜色各占多少的区域. 解题思路:用并查集维护每一个位置相应下一 ...

随机推荐

  1. MD5加密、时间戳转换、base64算法加密、解密

    #region MD5加密 /// <summary> /// MD5加密 /// </summary> /// <param name="str"& ...

  2. Zadig - USB driver installation made easy

    http://zadig.akeo.ie/

  3. PDF 补丁丁 0.5.0.2273 测试版发布:修复崩溃问题,可自定义工具栏文本

    新的测试版修复了编辑器在打开文件后再打开文件会崩溃的严重错误,以及一些小问题. 在一些小细节上作了调整,例如可自定义常用工具栏的文本等等. 由于之前测试版本的错误比较严重,推荐网友下载新的测试版.

  4. RMAN 前期准备工作和实例

    理解恢复目录,RMAN可以在没有恢复目录(NOCATALOG)下运行,这个时候备份信息保存在控制文件.保存在控制文件的备份信息是很危险的,如果控制文件的破坏将导致备份信息的丢失与恢复的失败,而且,没有 ...

  5. <jsp:include page="" />路径

    填写绝对路径:page="/WEB-INF/folder1/folder2/.../fileName.jsp"

  6. dom事件与event对象总结

    1 事件:就是文档或浏览器窗口中发生的一些特定的交互瞬间.    tips:js和xhtml的交互是通过当用户或浏览器操作网页时发生的事件来处理的. 1.1 事件流:即事件的顺序.        事件 ...

  7. hadoop运行原理之Job运行(四) JobTracker端心跳机制分析

    接着上篇来说,TaskTracker端的transmitHeartBeat()方法通过RPC调用JobTracker端的heartbeat()方法来接收心跳并返回心跳应答.还是先看看这张图,对它的大概 ...

  8. 转一个 Xcode 7 缺少 *.dylib库的解决方法

    Xcode7中 Link Binary With Libraries 没有 .dylib库,只能找到对应的 .tbd,但不能代替使用,通过查找资料,尝试后得到以下两种解决方法. 方法1. (heqin ...

  9. 如何隐藏DOM元素

    在CSS中,要隐藏DOM元素常见的方法有: 设置元素的opacity值为0 设置元素的visibility值为hidden 设置元素的display值为none 设置元素的position值为abso ...

  10. React之Composition Vs inheritance 组合Vs继承

    React的组合   composition: props有个特殊属性,children,组件可以通过props.children拿到所有包含在内的子元素, 当组件内有子元素时,组件属性上的child ...