题目

链接

题意:在 $10^5 \times 10^5$ 的大网格上,给出 $n$ 的格点的坐标,求联通块数(上下左右及对角线都认为相邻)

分析

DFS需要遍历网格的每个格点,可能会超时?

初始化时,对每个格点建立并查集,遍历每个格点将相邻的合并,最终的集合个数就是联通块的个数。

具体实现时,对 $n$ 个点的坐标排序,因此合并时只需考虑左上部分。

 #include<bits/stdc++.h>
using namespace std; const int maxn = + ;
int fa[maxn]; //fa父节点
int mar[maxn]; //记录第i列被覆盖的最大行数对应的下标
pair<int, int>p[maxn]; //初始化n个节点
void init(int n)
{
for (int i = ; i <= n; i++)
fa[i] = i;
} //查询树的根
int find(int x)
{
if (x != fa[x])
return fa[x] = find(fa[x]);
return fa[x];
} //合并x和y所属的集合
void unite(int x, int y)
{
int rx = find(x);
int ry = find(y);
if (x == y) return; fa[rx] = ry;
} int main()
{
int n;
scanf("%d", &n);
for(int i = ;i <= n;i++) scanf("%d%d", &p[i].first, &p[i].second);
sort(p+, p+n+); //默认就是按第一维排序
init(n);
for(int i = ;i <= n;i++) mar[i] = -; //初始化每列都没有元素 for(int i = ;i <= n;i++)
{
int x = p[i].first, y = p[i].second;
if(p[i-].first == x && p[i-].second == y-) unite(i-, i); //左边 if(mar[y-] != - && p[mar[y-]].first == x-) unite(mar[y-], i); //左上角 if(mar[y] != - && p[mar[y]].first == x-) unite(mar[y], i); //上方 if(mar[y+] != - && p[mar[y+]].first == x-) unite(mar[y+], i); //右上角
mar[y] = i;
} int ans = ;
for(int i = ;i <= n;i++)
if(find(i) == i) ans++;
printf("%d\n", ans); return ;
}

参考链接:https://zhuanlan.zhihu.com/p/72702597

长春理工大学第十四届程序设计竞赛A Rubbish——并查集&&联通块的更多相关文章

  1. 长春理工大学第十四届程序设计竞赛(重现赛)M.Orx Zone

    链接:https://ac.nowcoder.com/acm/contest/912/M 题意: Daenerys Stormborn, 风暴中出生的丹尼莉丝,the Unburnt, 烧不死的,Qu ...

  2. 长春理工大学第十四届程序设计竞赛(重现赛)L.Homework Stream

    链接:https://ac.nowcoder.com/acm/contest/912/L 题意: 作为大珩班尖子生,小r每天有很多作业要完成,例如工图.工图和工图. 很显然,做作业是要有顺序的.作业之 ...

  3. 长春理工大学第十四届程序设计竞赛(重现赛)J.Printout

    链接:https://ac.nowcoder.com/acm/contest/912/J 题意: 小r为了打校赛,他打算去打字社打印一份包含世界上所有算法的模板. 到了打字社,小r一看价格:总打印页数 ...

  4. 长春理工大学第十四届程序设计竞赛(重现赛)I.Fate Grand Order

    链接:https://ac.nowcoder.com/acm/contest/912/I 题意: Fate Grand Order是型月社发行的角色扮演类手机游戏,是著名的氪金抽卡"垃圾&q ...

  5. 长春理工大学第十四届程序设计竞赛(重现赛)H.Arithmetic Sequence

    题意: 数竞选手小r最喜欢做的题型是数列大题,并且每一道都能得到满分. 你可能不相信,但其实他发现了一个结论:只要是数列,无论是给了通项还是给了递推式,无论定义多复杂,都可以被搞成等差数列.这样,只要 ...

  6. 长春理工大学第十四届程序设计竞赛(重现赛)F.Successione di Fixoracci

    链接:https://ac.nowcoder.com/acm/contest/912/F 题意: 动态规划(Dynamic programming,简称dp)是一种通过把原问题分解为相对简单的子问题的 ...

  7. 长春理工大学第十四届程序设计竞赛(重现赛)B.Bowling Game

    链接:https://ac.nowcoder.com/acm/contest/912/B 题意: 链接:https://ac.nowcoder.com/acm/contest/912/B来源:牛客网 ...

  8. 长春理工大学第十四届程序设计竞赛(重现赛)J

    J.Printout 题目:链接:https://ac.nowcoder.com/acm/contest/912/J 题目: 小r为了打校赛,他打算去打字社打印一份包含世界上所有算法的模板. 到了打字 ...

  9. 长春理工大学第十四届程序设计竞赛(重现赛)I

    I.Fate Grand Order 题目链接:https://ac.nowcoder.com/acm/contest/912/I 题目: Fate Grand Order是型月社发行的角色扮演类手机 ...

随机推荐

  1. MVVM模式中ViewModel和View、Model有什么区别

    Model:很简单,就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model. View:也很简单,就是展现出来的用户界面. 基本上,绝大多数软件所做的工作无非就是从数据 ...

  2. C++ 简单实现 依赖注入(IOC)

    由于C++ 不支持“反射机制”, 在C++中需要实现依赖注入或控制反转需要增加辅助程序.例如在Windows 开发程序中根据类名动态创建对象,需要在类定义中增加宏.本文主要介绍C++ Ioc的一种实现 ...

  3. MyBatis使用小结

  4. Maven学习存档(3)——eclipse集成maven

    一.安装Maven插件 在eclipse的菜单中选择Help——Install New Software 在弹出框的Work with中写入插件安装地址:http://m2eclipse.sonaty ...

  5. java统计字符串中每个字符出现的次数

    package MapTest; import java.util.HashMap; public class MapTest { public static void Count(String st ...

  6. KeyValuePair<string, string>

    ; #region CUP Method /// <summary> /// 请求与响应的超时时间 /// </summary> static public int Timeo ...

  7. 【css】浅谈BFC

    定义: 块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域. BFC的布 ...

  8. javaIO——LineNumberReader

    LineNumberReader 是java字符流中的一员,它继承自 BufferedReader,只是在 BufferedReader 基础上,提供了对当前流位置所在文本行的标记记录.先来看看定义: ...

  9. 解决npm ERR!Unexpected end of JSON input while paring near (解析附近时JSON输入意外结束)'...."^2.0.0-rc.0","glob"'等npm install错误

    摘要 最近更新了一次node,但是更新后npm的命令总是会报 npm WARN deprecated fsevents@2.0.6: Please update: there are crash fi ...

  10. HTML中由于DIV(块元素)浮动,导致的父元素高度塌陷问题的解决方案

    费话不多说,直接上问题: 1.开始时,页面只有两个DIV的嵌套(见图) 运行结果是: 现在看运行的是正常的,但是当我设置让 class="box2" 的DIV浮动时 运行结果是这样 ...