题目

链接

题意:在 $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. python的一些知识点

    1. 内置函数  iter 2. 可迭代对象与迭代器:

  2. Mybatis Plus带多条件的多表联合、分页、排序查询

    目录 一.现有表 student学生表: facultylist学院表: 二.同时满足以下需求: 1.多表联合查询出学院名字 2.可以带多条件查询 3.指定页码,页数据大小进行物理分页查询 三.解决步 ...

  3. 火狐 , IE , 谷歌浏览器的 驱动下载地址汇总

    一.Firefox和驱动下载地址 所有火狐浏览器版本下载地址:http://ftp.mozilla.org/pub/firefox/releases/ 所有火狐驱动geckodriver版本下载地址: ...

  4. 怎样启动Nginx并设置开机自动运行

    1. 启动 sudo systemctl start nginx.service 2. 设置开机自动运行 sudo systemctl enable nginx.service

  5. 怎样获取xhr的当前状态

    一个XMLHttpRequets实例从创建到发起请求再到获取数据, 期间会有一些中间状态, 这些状态是必要的, 我们可以通过判断这些状态值来进行不同的动作. xhr中获取请求状态的属性是: xhr.r ...

  6. excel 导入

    public static DataTable ExcelToDataTable(string fileName, string sheetName, bool isFirstRowColumn) { ...

  7. VS 之github

    VS 代码发布到TFS上 1. 登录  visualstudio.com. 进入 https://qgb.visualstudio.com Create Project 这里是相当于新建了一个文件夹 ...

  8. Springboot+mybatis+druid 配置多数据源

    项目结构 application.yml配置文件 spring: application: name: service datasource: primary: jdbc-url: jdbc:orac ...

  9. sqlserver错误状态码解释

    Code Error Message 0 操作成功完成. 1 功能错误. 2 系统找不到指定的文件. 3 系统找不到指定的路径. 4 系统无法打开文件. 5 拒绝访问. 6 句柄无效. 7 存储控制块 ...

  10. python之字符串类型的格式化

    python之字符串类型的格式化 要点:python字符串通过format()方法进行格式化处理.(Python语言同时支持两种字符串格式化方法,一种类似C语言中printf()函数的格式化方法,支持 ...