【题解】LuoGu5423:[USACO19OPEN]Valleys P
原题传送门
根据两个式子展开的题目
首先按照高度从小到大排序好之后按顺序加点
对于新加的这个点,在四周四个点,如果已经加入了,就合并,用并查集维护
然后判断新加的点所属的连通块知否合法
F=E+2−V,即块数=边数+2−点数F=E+2-V,即块数=边数+2-点数F=E+2−V,即块数=边数+2−点数
F=1(边界框起来的一个大块)+元环个数+洞个数F=1(边界框起来的一个大块)+元环个数+洞个数F=1(边界框起来的一个大块)+元环个数+洞个数
定义元环为一个单位小正方形,就是四个点都已经加入的
然后合法就意味着洞的个数为0
所以并查集的同时维护E,V,元环个数E,V,元环个数E,V,元环个数,计算出洞的个数,若为0,则统计答案
Code:
#include <bits/stdc++.h>
#define maxn 800
#define int long long
using namespace std;
struct data{int h, id;
}a[maxn * maxn];
int vis[maxn][maxn], f[maxn * maxn], n, m;
long long ans, v[maxn * maxn], num[maxn * maxn], e[maxn * maxn], cnt;inline int read(){int s = 0, w = 1;char c = getchar();for (; !isdigit(c); c = getchar()) if (c == '-') w = -1;for (; isdigit(c); c = getchar()) s = (s << 1) + (s << 3) + (c ^ 48);return s * w;
}int id(int i, int j){ return (i - 1) * n + j; }
bool cmp(data x, data y){ return x.h < y.h; }
int getfa(int k){ return k == f[k] ? k : f[k] = getfa(f[k]); }void merge(int x, int y){int s1 = getfa(x), s2 = getfa(y);if (s1 != s2) v[s2] += v[s1], e[s2] += e[s1], f[s1] = s2, cnt += num[s1];
}signed main(){// freopen("pa.in", "r", stdin);
// freopen("pa.out", "w", stdout);n = read();for (int i = 1; i <= n; ++i)for (int j = 1; j <= n; ++j){int x = id(i, j);a[x].h = read(), a[x].id = x;}sort(a + 1, a + 1 + n * n, cmp);for (int i = 1; i <= n * n; ++i) f[i] = i, v[i] = 1;for (int i = 1; i <= n * n; ++i){int pos = a[i].id, x = (pos - 1) / n + 1, y = (pos - 1) % n + 1;vis[x][y] = 1;cnt = 0;if (x > 1 && vis[x - 1][y]) ++e[pos], merge(id(x - 1, y), pos);if (x < n && vis[x + 1][y]) ++e[pos], merge(id(x + 1, y), pos);if (y > 1 && vis[x][y - 1]) ++e[pos], merge(id(x, y - 1), pos);if (y < n && vis[x][y + 1]) ++e[pos], merge(id(x, y + 1), pos);if (vis[x - 1][y - 1] && vis[x - 1][y] && vis[x][y - 1]) ++cnt;if (vis[x - 1][y] && vis[x - 1][y + 1] && vis[x][y + 1]) ++cnt;if (vis[x][y - 1] && vis[x + 1][y - 1] && vis[x + 1][y]) ++cnt;if (vis[x + 1][y] && vis[x][y + 1] && vis[x + 1][y + 1]) ++cnt;num[pos] = cnt;// printf("%lld %lld %lld : %lld %lld %lld\n", x, y, pos, e[pos], v[pos], num[pos]);if (e[pos] + 2 - v[pos] - cnt == 1) ans += v[pos];}printf("%lld\n", ans);return 0;
}
【题解】LuoGu5423:[USACO19OPEN]Valleys P相关推荐
- 【题解】LuoGu5425:[USACO19OPEN]I Would Walk 500 Miles
原题传送门 首先通过打表能找到性质: x+yx+yx+y越大,最终产生的距离是越小的 以n=7500n=7500n=7500为例 7500,74997500,74997500,7499产生的数肯定是最 ...
- Hills And Valleys CodeForces - 1467B
Hills And Valleys CodeForces - 1467B 题意: 修改数列中的 一个 数字 使得峰(波峰.波谷)的数量最少 题解: 修改一个数,最多只能影响左右两个数,所能减少的峰的数 ...
- ICPC训练联盟2021寒假冬令营(5)(部分题解):
ICPC训练联盟2021寒假冬令营(5)(部分题解): A - Brainman Raymond Babbitt drives his brother Charlie mad. Recently Ra ...
- [JS][dfs]题解 | #迷宫问题#
题解 | #迷宫问题# 题目链接 迷宫问题 题目描述 定义一个二维数组 N*M ,如 5 × 5 数组下所示: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 1, 1 ...
- [JS][dp]题解 | #打家劫舍(一)#
题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...
- [JS]题解 | #魔法数字#
题解 | #魔法数字# 题目链接 魔法数字 题目描述 牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的. 操作共有三种,如下: 在当前数字的基础上 ...
- [JS]题解 | #岛屿数量#
题解 | #岛屿数量# 题目链接 岛屿数量 题目描述 时间限制:1秒 空间限制:256M 描述 给一个01矩阵,1代表是陆地,0代表海洋, 如果两个1相邻,那么这两个1属于同一个岛.我们只考虑上下左右 ...
- [JS] 题解:提取不重复的整数
题解:提取不重复的整数 https://www.nowcoder.com/practice/253986e66d114d378ae8de2e6c4577c1 时间限制:1秒 空间限制:32M 描述 输 ...
- 洛谷-题解 P2672 【推销员】
独门思路!链表加优先队列! 这题一望,贪心是跑不掉了,但是我贪心并不好,所以想到了一个复杂一些但思路更保稳的做法 思路: 1 因为是离线操作,所以我们可以倒着求,先求x=n的情况,因为那样直接就知道了 ...
- [洛谷1383]高级打字机 题解
题解 这道题一看就珂以用主席树啊 这是一道神奇的题目,那么我们先敲一个主席树,然后维护一个数组len,表示下一次应该在len + 1插入, 之后对于T操作,在上一个版本的len + 1上直接执行插入 ...
最新文章
- zabbix简介(第一章第一节)
- Bokeh中图形与组件的布局简介 | Bokeh 小册子
- 树莓派实现AD转换(pcf8591模块)
- ConnectionString Property - ADO
- C#Winform调用wsdl接口webservice#http
- 写一本Linux内核方面的书籍
- 3. 盒子模型与兼容性
- 关于Latent Dirichlet Allocation及Hierarchical LDA模型的必读文章和相关代码
- 更换根目录linux命令,linux中怎么切换到根目录
- excel宏的使用图解教程
- 新人如何快速融入团队
- 三国志战略版360区S4服务器合并信息,三国志战略版s4赛季开局选哪个州?平民开局起兵地推荐...
- 惠普服务器lio装系统,惠普Pavilion一体机一键u盘装系统win10教程
- 科学研究是有闲人群的玩艺———读爱因斯坦的短文有感
- 公众号多题库查题系统
- Workbench LSDYNA的子弹入水流固耦合计算
- play framework 提示:VerifyError错误
- Hi,运维,你懂Java吗-No.2:JDK介绍及安装
- 嵌入式学习笔记——STM32的USART通信概述
- 2020年游戏建模师发展前景怎么样?值不值得入坑
热门文章
- 怎么样去学习平面设计,学ps就是平面设计了吗?
- ThinkPad笔记本如何重装系统
- DTL常用过滤器详解
- Linu常用命令精选
- access中本年度的四月一日_2014年3月计算机二级ACCESS上机试题及详解十二
- Caused by: No object in the CompoundRoot has a publicly accessible property named 'y' (no setter cou
- git stach储藏功能(SourceTree 使用方法,Visual studio 2019 中使用
- oracle 19c jdbc之Reactive Streams Ingestion (RSI) Library
- 用C语言写一个数字版的3阶魔方
- so easy 的 Vue3.0自定义指令(也搜一贼)