补题,逆序考虑每个询问的时间,这样每次就变成出现新岛屿,然后用并查集合并统计。fa = -1表示没出现。

以前写过,但是几乎忘了,而且以前写得好丑的,虽然常数比较小,现在重新写练练手。每个单词后面都要加空格不然PE

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1005;
const int maxq = 1e5+1;int q[maxq];
int pa[maxn*maxn];int Find(int x){ return x==pa[x]?x:pa[x]=Find(pa[x]); }int h[maxn][maxn];struct Node
{int x,y,val;
}nd[maxn*maxn];bool operator < (const Node &x,const Node &y) { return  x.val < y.val; }int dx[] = {0,0,-1,1};
int dy[] = {-1,1,0,0};int main()
{//freopen("in.txt","r",stdin);int Z; scanf("%d",&Z);while(Z--){int m,n; scanf("%d%d",&m,&n);for(int i = 0; i < m; i++){for(int j = 0; j < n; j++){scanf("%d",h[i]+j);int t = i*n+j;nd[t].x = i; nd[t].y = j;nd[t].val = h[i][j];}}sort(nd,nd+m*n);memset(pa,-1,sizeof(int)*(m*n));int Ts; scanf("%d",&Ts);for(int i = 0; i < Ts; i++){scanf("%d",q+i);}int k = m*n-1;int ans = 0;for(int i = Ts-1; i >= 0; i--){if(q[i]<nd[k].val){while(k>=0&&q[i]<nd[k].val){int id = nd[k].x*n+nd[k].y;if(!~pa[id]) ans++,pa[id] = id;for(int d = 0; d < 4; d++){int nx = nd[k].x+dx[d], ny = nd[k].y+dy[d];if(nx>=0&&nx<m&&ny>=0&&ny<n&&h[nx][ny]>q[i]){int nid = nx*n+ny;if(~pa[nid]) {int a = Find(nid), b = Find(id);if(a != b) {pa[a] = b;ans--;}}}}k--;}if(k<0){for(;i>=0;i--){q[i] = ans;}break;}}q[i] = ans;}for(int i = 0; i < Ts; i++) printf("%d ",q[i]);putchar('\n');}return 0;
}

转载于:https://www.cnblogs.com/jerryRey/p/4776698.html

UVA1665 Islands (并查集)相关推荐

  1. Uva1665岛屿——并查集

    题意: 输入一个n*m矩阵,每个格子都有一个正整数,再输入T个整数ti,对于每个ti,输出大于ti的正整数组成多少个四连块. 思路: 首先想到的就是枚举处理每个ti,对每个ti而言,问题都是一个求多少 ...

  2. LeetCode 305. 岛屿数量 II(并查集)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.1 改进计算方法 1. 题目 假设你设计一个游戏,用一个 m 行 n 列的 2D 网格来存储你的游戏地图. 起始的时候,每个格子的地形都被默认标记 ...

  3. 图中连通块的个数:并查集

    图的连通性问题 在地图上有若干城镇(点),已知所有有道路直接相连的城镇对.要解决整幅图的连通性问题.比如,随意给你两个点,让你判断它们是否连通:或者问你整幅图一共有几个连通块,也就是被分成了几个互相独 ...

  4. Central Europe Regional Contest 2019 J. Saba1000kg (并查集+根号讨论)

    链接:https://ac.nowcoder.com/acm/contest/7817/I 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言524 ...

  5. 并查集c++代码_[Leetcode 每日精选](本周主题-并查集) 547. 朋友圈

    题目难度: 中等 原题链接 今天继续来做并查集的问题, 这道题仍然比较基础, 而且也是个比较接近现实的问题了. 大家在我的公众号"每日精选算法题"中的聊天框中回复 并查集 就能看到 ...

  6. HDU1811 Rank of Tetris 拓扑排序+并查集 OR 差分约束最短路+并查集

    题目链接 题意:就是给你一堆关系,看能不能排出个确定的顺序 做法: 1. 拓扑排序+并查集 应该很容易想到的一种思路,大于小于建立单向边.对于相等的呢,就把他们缩成一个点.就用并查集缩成一个点就行了 ...

  7. HDU 2586 How far away ? LCA ---tanjar+并查集 离线算法

    tanjar算法离线求LCA的思想主要是利用并查集的思想. 求距离的话就是d[start[i]]+end[en[i]]-2*d[lca[i]]; 首先从根节点dfs,在深度遍历的回溯的过程中不断的更新 ...

  8. POJ - 2513 Colored Sticks 欧拉通路+并查集+静态树

    一开始想用map来搞,但是感觉好复杂,然后想了一下看大佬们用trie做的,感觉十分合理就敲了一发. 一开始re,数组要开到550000 只会静态的字典树,在每个根节点看是否出现过改颜色,如果没有就把该 ...

  9. 关于 并查集(union find) 算法基本原理 以及 其 在分布式图场景的应用

    二月的最后一篇水文-想写一些有意思的东西. 文章目录 环检测在图数据结构中的应用 深度/广度优先 检测环 并查集数据结构 (Union-Find) 基本概念 初始化 合并 union 查找祖先 优化1 ...

  10. 【BZOJ1015】【JSOI2008】星球大战 并查集

    题目大意 给你一张\(n\)个点\(m\)条边的无向图,有\(q\)次操作,每次删掉一个点以及和这个点相邻的边,求最开始和每次删完点后的连通块个数. \(q\leq n\leq 400000,m\le ...

最新文章

  1. 人工智能时代,企业的未来离不开云专线
  2. [世界杯]世界杯的哲学思想
  3. 减少代码中该死的 if else 嵌套
  4. 华硕老毛子(Padavan)——L2TP连接自动重连解决方案
  5. c语言5个学生3门成绩写入文件,(5) 输入N个学生的姓名和3门课的成绩,统计每个学生的平均成绩后,将结果输出到文件studen...
  6. FFMPEG学习(一)---【命令行】采集视频和音频
  7. python如何连redis_python操作redis
  8. python中如何保存文件_如何在python中处理后保存文件?
  9. Windows 下安装 laravel框架
  10. Ubuntu16.04下在Anaconda里面安装opencv
  11. struts2 s:selects:radio 标签用法
  12. [C#/Java] C#中调用Servlet示例
  13. HTML5期末大作业:书店商城系统网站设计——响应式图书电商HTML 网上书店模板 (25页) HTML+CSS+JavaScript
  14. 《现代操作系统(中文第四版)》课后习题答案 第三章 内存管理
  15. 基于51单片机的电子称称重压力检测阈值报警系统方案原理图设计
  16. sprintf()函数的用法
  17. 论文阅读《PatchMatchNet: Learned Multi-View Patchmatch Stereo》
  18. JAVA多线程并发之线程实现,4种线程池,终止线程4种方式
  19. 微信小程序开发中遇到的坑
  20. ElasticSearch之 ik分词器详解

热门文章

  1. 一个简单的例子让你理解强化学习是什么,和有监督学习的区别又是什么
  2. ASIHTTPRequest 状态栏网络等待指示器
  3. Poco C++库简介
  4. 混淆矩阵 python实现
  5. 小红伞命令行工具ScanCL使用安装
  6. 岗位po是什么意思_通信公司中PO和PM分别是什么意思?
  7. 《如何高效学习》总结
  8. 3D-HEVC解码器一
  9. iPad谷歌浏览器怎么开摄像头_谷歌浏览器书签栏怎么显示_谷歌浏览器显示书签栏步骤...
  10. Operation was explicitly assigned to /device:GPU:0 but available devices are [ /job:localhost/repli