文章目录

  • 1359. 城堡

AcWing网站原题通道

1359. 城堡



题意分析:
这道题难度并不大,只要熟练使用并查集即可。给我们一张地图,#代表墙壁,我们用1表示西墙,2表示北墙,4表示东墙,8表示南墙,将没有墙壁隔开的连通的方块记为一个房间,题目共有四问:房间的总数,最大的房间的面积,打掉一堵墙可以得到的最大的房间的面积,打掉的这堵墙在哪里。

这道题可以使用并查集FloodFill来做,这里讲解一下使用并查集的做法。(假如并查集的基础知识不太了解,可以先事先了解一下并查集的基础使用。)

我们可以从城堡左上角开始逐行枚举,每次枚举北边和东边两个方向,就可以不漏的枚举出来所有的墙,假设枚举到的位置的数p=9,我们需要枚举他东边的墙,我们只需要让p & 4判断是否是1,若是1则证明东边有墙。当枚举到的方向没有墙的话,我们就是用并查集将这两个方块加入到一个连通块中,初始cnt=n*m,也就是开始的时候有n*m个房间,我们连通一次,少一个房间,最后cnt就是房间的个数。

如图,共有五个房间:

#include <iostream>
#include <cstring>using namespace std;const int N = 55 , M = N*N;int n , m;
int p[M] , sz[M]; // p:并查集 sz:连通块的面积
int g[N][N];// 并查集合并
int find(int x)
{if(x != p[x]) p[x] = find(p[x]);return p[x];
}int main()
{cin >> m >> n;for(int i = 0; i < n; i++)for(int j = 0; j < m; j++)cin >> g[i][j];for(int i = 0; i < n*m; i++) p[i] = i , sz[i] = 1; //初始化并查集int cnt = n*m , max_area = 1; //cnt:房间数(初始n*m,合并一次减一) max_area:最大面积,所有房间不连通的情况下为1// 偏移量表示向北走,向东走,dw表示对应方向的墙的数字int dx[2] = {-1 , 0} , dy[2] = {0 , 1} , dw[2] = {2 , 4}; for(int i = 0; i< n; i++)for(int j = 0; j < m; j++)for(int u = 0; u < 2; u++)if(!(g[i][j] & dw[u])) // 如果对应方向没有墙{int x = i + dx[u] , y = j + dy[u];if(x < 0 || x >= n || y < 0 || y >= m) continue; // 判断边界int a = i * m + j , b = x * m + y;a = find(a) , b = find(b);if(a != b) {cnt--;p[a] = b;sz[b] += sz[a];max_area = max(max_area , sz[b]);}}cout << cnt << endl << max_area << endl;max_area = 0;int rx , ry , rw;// 从西到东 从南到北for(int j = 0; j < m; j++)for(int i = n-1; i >= 0; i--)for(int u = 0; u < 2; u++)if(g[i][j] & dw[u]) // 如果有墙{int x = i + dx[u] , y = j + dy[u];if(x < 0 || x >= n || y < 0 || y >= m) continue;int a = i * m + j , b = x * m + y;a = find(a) , b = find(b);if(a != b) // 如果不在一个连通块{int area = sz[a] + sz[b];if(area > max_area) // 更新最大面积和坐标{max_area = area;rx = i , ry = j;rw = dw[u]; // 存储墙}}}cout << max_area << endl;cout << rx + 1 << ' ' << ry + 1 << ' ' << (rw == 2 ? 'N' : 'E') << endl;return 0;
}

USACO 1359. 城堡(并查集)相关推荐

  1. hdu 1272 小希的迷宫 (并查集)

    小希的迷宫                                                                          Time Limit: 2000/1000 ...

  2. HDOJ---1272 小希的迷宫[并查集]

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  3. 二分+并查集【bzoj3007】[SDOI2012]拯救小云公主

    Description 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意 ...

  4. HDU——1272小希的迷宫(并查集+拓扑排序)

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  5. HDU1272 小希的迷宫【并查集】

    小希的迷宫 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  6. 洛谷P2498 [SDOI2012]拯救小云公主 【二分 + 并查集】

    题目 英雄又即将踏上拯救公主的道路-- 这次的拯救目标是--爱和正义的小云公主. 英雄来到boss的洞穴门口,他一下子就懵了,因为面前不只是一只boss,而是上千只boss.当英雄意识到自己还是等级1 ...

  7. 并查集(小西的迷宫)

    上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...

  8. POJ1984 Navigation Nightmare —— 种类并查集

    题目链接:http://poj.org/problem?id=1984 Navigation Nightmare Time Limit: 2000MS   Memory Limit: 30000K T ...

  9. 并查集训练题解(F-J)

    训练链接:http://acm.njupt.edu.cn/vjudge/contest/view.action?cid=173#overview F题 Navigation Nightmare Tim ...

  10. 小希的迷宫 HDU - 1272---并查集+思维

    上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就是说如果有一个通道连通了 ...

最新文章

  1. 某网友惊现如此言论:程序员没有技术壁垒,不值得这么高工资!过高工资引起加班和行业内卷,应该用降薪来换取不加班!网友:你好天真!...
  2. 使用json-server搭建模拟api接口
  3. SAP MM模块的预留详解
  4. cmd命令行导出的txt文本文档编码格式转换
  5. 火狐插件火狐***插件将Firefox变成***工具的七个插件
  6. FP error code老是忘记的看这里:只给出最常用的几个。
  7. 计算机视觉领域常见期刊和会议,计算机视觉领域常见期刊和会议
  8. linux修改文件打开最大数(ulimit命令)
  9. JS_高程7.函数表达式(1)
  10. favicon ico什么意思_你真的知道IPFS与Filecoin是什么吗?
  11. python字节码解析_dis --- Python 字节码反汇编器 — Python 3.9.1 文档
  12. Win10问题篇:解决电脑插入耳机没声音。
  13. Titanic 生存预测(上)
  14. 什么是同构与异构?及在不同背景下的理解
  15. 小程序--计算器demo
  16. SQL Sever 2019的下载与安装【Win10一站式服务】
  17. 跳槽关系三国演义告诉我们的60条真理
  18. Sonicwall 防火墙说明书在线观看
  19. 我们工作到底为了什么?---惠普前中国区总裁的感悟
  20. 【京东】商品列表采集

热门文章

  1. 带你深入剖析TCP/IP协议、TCP协议和UDP协议、IP协议
  2. R语言使用grid包的unit函数将数据对象转化为有计量单位的数据(例如转化为毫米单位、长度单位mm)
  3. 详细描述Tomcat体系结构(图文并茂)
  4. 文本数据的机器学习自动分类方法(转)
  5. 云锁linux宝塔安装,宝塔面板安装云锁
  6. WinPE安装64位Win7的方法
  7. Linux中招挖矿木马如何处置,附带解决方案
  8. Canvas彩色樱花图案背景js特效
  9. 如何用python爬虫薅羊毛_怎么写网络爬虫来薅羊毛?
  10. 2021 Summary