[USACO14JAN] Ski Course Rating G
题目大意
滑雪场用一个 N ∗ M N*M N∗M 的整数矩阵表示海拔高度,每个整数表示一个范围在 1 0 9 10^9 109 的高度。每个格子都可以滑到相邻的格子,爱好者们将会在雪场种尽情享受。有些格子被指定为起点,每个起点都要进行评级以帮助爱好者选择。
定义起点 p p p 的难度级别 d d d 定义为满足以下条件的最小值:
-
从一个格子能滑到相邻的格子时,这两个格子的海拔差不超过 d d d
-
至少能够到达 T T T 个格子(包括起点本身)。
你的任务是计算每个起点的难度级别。
N , M ≤ 500 N,M≤500 N,M≤500。
题解
读完题的我:这不纯整体二分吗,刚好前段时间刚练了整体二分,看我迅速切掉/dy。(自信开写)
(10分钟后)写完了,非常好!交一发!——TLE20。
咋回事,我卡常!我找死循环!我找不到。我看复杂度,byd复杂度是错的。
一怒之下怒了一下,然后就把这题丢了……
(附一份整体二分代码看乐子)
#include<bits/stdc++.h>
using namespace std;const int N=500+5;int n,m,k,mx,num,sum,ass,tot,a[N][N],b[N][N],c[N][N],d[N*N],ans[N*N],dx[4]={-1,0,0,1},dy[4]={0,-1,1,0},vis[N][N];struct giao{int x,y,id;
}q[N*N];bool cmp(giao x,giao y){return (d[c[x.x][x.y]]>=k)<(d[c[y.x][y.y]]>=k);
}void work(int rx,int ry,int z,int id){queue<int> qx,qy;qx.push(rx),qy.push(ry);vis[rx][ry]=tot;int res=0;while(!qx.empty()){int x=qx.front(),y=qy.front();qx.pop(),qy.pop();c[x][y]=id;res++;for(int i=0;i<4;i++){int nx=x+dx[i],ny=y+dy[i];if(nx<1||ny<1||nx>n||ny>m||vis[nx][ny]==tot) continue;if(abs(a[nx][ny]-a[x][y])>z) continue;qx.push(nx),qy.push(ny);vis[nx][ny]=tot;}}d[id]=res;
}void solve(int l,int r,int a,int b){tot++;if(a>b) return;if(l==r){for(int i=a;i<=b;i++)ans[q[i].id]=l;return;}memset(vis,0,sizeof(vis));int mid=l+r>>1;for(int i=a;i<=b;i++)if(vis[q[i].x][q[i].y]!=tot){sum++;work(q[i].x,q[i].y,mid,sum);}sort(q+a,q+b+1,cmp);for(int i=a;i<=b;i++)if(d[c[q[i].x][q[i].y]]>=k){solve(l,mid,i,b);solve(mid+1,r,a,i-1);return;}solve(mid+1,r,a,b);
}int main(){scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);mx=max(mx,a[i][j]); }for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&b[i][j]);if(b[i][j]){num++;q[num]=(giao){i,j,num};b[i][j]=num;}}solve(0,mx,1,num);for(int i=1;i<=num;i++)ass+=ans[i];printf("%d",ass);return 0;
}
过了一周,我又想起了这道题,于是翻出来又看了看。发现脑子已经彻底被整体二分局限住了。遂看了一眼题解。看了5秒然后切了。
考虑直接枚举高度差,每枚举到一个值就把高度差等于这个值的两个点放进同一个联通块里,联通快打小大于 T T T 时就可以统计答案。高度差最多只有 2 n 2n 2n 种,复杂度可以接受。
为了方便统计两点之间高度差一开始先在相邻点之间连边。最后用一个并查集即可。
复杂度应该是 O ( n 2 ) O(n^2) O(n2) 。
Code
#include<bits/stdc++.h>
using namespace std;const int N=500+5;
typedef long long ll;int n,m,k,cnt,siz[N*N],f[N*N],a[N][N],b[N][N];
ll ans;
vector<int> v[N*N];struct giao{int x,y,v;
}e[N*N*2];bool cmp(giao x,giao y){return x.v<y.v;
}int find(int x){return x==f[x]?x:f[x]=find(f[x]);
}int id(int x,int y){return (x-1)*m+y;
}int main(){scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&a[i][j]);v[id(i,j)].push_back(id(i,j));f[id(i,j)]=id(i,j);}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&b[i][j]);siz[id(i,j)]=b[i][j];}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){if(i!=n) e[++cnt]=(giao){id(i,j),id(i+1,j),abs(a[i][j]-a[i+1][j])};if(j!=m) e[++cnt]=(giao){id(i,j),id(i,j+1),abs(a[i][j]-a[i][j+1])};}sort(e+1,e+1+cnt,cmp);for(int i=1,x,y;i<=cnt;i++){x=e[i].x,y=e[i].y;x=find(x),y=find(y);if(x==y) continue;if(v[x].size()>v[y].size()) swap(x,y);if(v[x].size()+v[y].size()>=k){if(v[x].size()<k) ans+=1ll*e[i].v*siz[x];if(v[y].size()<k) ans+=1ll*e[i].v*siz[y];}for(auto j:v[x])v[y].push_back(j);siz[y]+=siz[x];f[x]=y;}printf("%lld",ans);return 0;
}
相关文章:
[USACO14JAN] Ski Course Rating G
题目大意 滑雪场用一个 N ∗ M N*M N∗M 的整数矩阵表示海拔高度,每个整数表示一个范围在 1 0 9 10^9 109 的高度。每个格子都可以滑到相邻的格子,爱好者们将会在雪场种尽情享受。有些格子被指定为起点,每个起点都要进行评级以帮助爱好者选…...

初步认识 Neo4j 图数据库
Neo4j 是一种高性能的图数据库管理系统,基于图论设计,能够高效地存储和查询复杂的关系数据。以下是关于 Neo4j 的详细介绍: 核心特性 数据模型: Neo4j 使用图数据模型,将数据以节点(Node)、关系…...
Qt中容器 QVector、QList、QSet和QMap 性能与用途比较
表格汇总: 容器存储结构随机访问性能插入/删除性能主要用途QVector连续存储的动态数组 O ( 1 ) O(1) O(1)末尾: O ( 1 ) O(1) O(1),中间: O ( n ) O(n) O(n)频繁随机访问,末尾元素的添加/删除QList优化存储࿰…...

ASP.NET Core - 依赖注入(四)
ASP.NET Core - 依赖注入(四) 4. ASP.NET Core默认服务5. 依赖注入配置变形 4. ASP.NET Core默认服务 之前讲了中间件,实际上一个中间件要正常进行工作,通常需要许多的服务配合进行,而中间件中的服务自然也是通过 Ioc…...
数学用语中 up to 的含义
1. 问题 在数学用语中,常见到“up to”这种用法, 但这种用法与我们常规情况下的用法不同,常令人困惑。 2. “等价关系”说明 已知两个数学对象 a 和 b,以及实数域R, • 当 a 和 b是通过 R 关联的࿰…...
Spring Boot + MyBatis-Flex 配置 ProxySQL 的完整指南
✅ Spring Boot MyBatis-Flex 配置 ProxySQL 的完整指南 下面是一个详细的教程,指导您如何在 Spring Boot 项目中使用 MyBatis-Flex 配置 ProxySQL 进行 读写分离 和 主从同步 的数据库访问。 🎯 目标 在 Spring Boot 中连接 ProxySQL。使用 MyBatis-…...

WEB攻防-通用漏洞_XSS跨站_权限维持_捆绑钓鱼_浏览器漏洞
目录 XSS的分类 XSS跨站-后台植入Cookie&表单劫持 【例1】:利用beef或xss平台实时监控Cookie等凭据实现权限维持 【例2】:XSS-Flash钓鱼配合MSF捆绑上线 【例3】:XSS-浏览器网马配合MSF访问上线 XSS的分类 反射型(非持久…...

人工智能任务20-利用LSTM和Attention机制相结合模型在交通流量预测中的应用
大家好,我是微学AI,今天给大家介绍一下人工智能任务20-利用LSTM和Attention机制相结合模型在交通流量预测中的应用。交通流量预测在现代城市交通管理中是至关重要的一环,它对优化交通资源分配以及提升道路通行效率有着不可忽视的意义。在实际…...

Day04-后端Web基础——Maven基础
目录 Maven课程内容1. Maven初识1.1 什么是Maven?1.2 Maven的作用1.2.1 依赖管理1.2.2 项目构建1.2.3 统一项目结构 2. Maven概述2.1 Maven介绍2.2 Maven模型2.2.1 构建生命周期/阶段(Build lifecycle & phases)2.2.2 项目对象模型 (Project Object Model)2.2.3 依赖管理模…...

Hive SQL必刷练习题:留存率问题
首次登录算作当天新增,第二天也登录了算作一日留存。可以理解为,在10月1号登陆了。在10月2号也登陆了,那这个人就可以算是在1号留存 今日留存率 (今日登录且明天也登录的用户数) / 今日登录的总用户数 * 100% 解决思…...

虚拟同步机(VSG)Matlab/Simulink仿真模型
虚拟同步机控制作为原先博文更新的重点内容,我将在原博客的基础上,再结合近几年的研究热点对其内容进行更新。Ps:VSG相关控制方向的simulink仿真模型基本上都搭建出来了,一些重要的控制算法也完成了实验验证。 现在搭建出来的虚拟…...
单头注意力机制(SHSA)详解
定义与原理 单头注意力机制是Transformer模型中的核心组件之一,它通过模拟人类注意力选择的过程,在复杂的输入序列中识别和聚焦关键信息。这种方法不仅提高了模型的性能,还增强了其解释性,使我们能够洞察模型决策的原因。 单头注意力机制的工作流程主要包括以下几个步骤:…...

【漏洞分析】DDOS攻防分析
0x00 UDP攻击实例 2013年12月30日,网游界发生了一起“追杀”事件。事件的主角是PhantmL0rd(这名字一看就是个玩家)和黑客组织DERP Trolling。 PhantomL0rd,人称“鬼王”,本名James Varga,某专业游戏小组的…...

JavaScript动态渲染页面爬取之Splash
Splash是一个 JavaScript渲染服务,是一个含有 HTTP API的轻量级浏览器,它还对接了 Python 中的 Twisted 库和 OT库。利用它,同样可以爬取动态渲染的页面。 功能介绍 利用 Splash,可以实现如下功能: 异步处理多个网页的渲染过程:获取渲染后…...

慧集通(DataLinkX)iPaaS集成平台-系统管理之UI库管理、流程模板
UI库管理 UI库管理分为平台级和自建两种,其中平台级就是慧集通平台自己内置的一些ui库所有客户均可调用,自建则是平台支持使用者自己根据规则自己新增对应的UI库。具体界面如下: 自建UI库新增界面: 注:平台级UI库不支…...
OpenCV相机标定与3D重建(59)用于立体相机标定的函数stereoCalibrate()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 标定立体相机设置。此函数找到两个相机各自的内参以及两个相机之间的外参。 cv::stereoCalibrate 是 OpenCV 中用于立体相机标定的函数。它通过一…...

摄像头模块在狩猎相机中的应用
摄像头模块是狩猎相机的核心组件,在狩猎相机中发挥着关键作用,以下是其主要应用: 图像与视频拍摄 高清成像:高像素的摄像头模块可确保狩猎相机拍摄出清晰的图像和视频,能够捕捉到动物的毛发纹理、行为细节及周围环境的…...
ruoyi-cloud docker启动微服务无法连接nacos,Client not connected, current status:STARTING
ruoyi-cloud docker启动微服务无法连接nacos,Client not connected, current status:STARTING 场景 当使用sh deploy.sh base来安装mysql、redis、nacos环境后,紧接着使用sh deploy.sh modules安装微服务模块,会发现微服务无法连接nacos的情…...
代码随想录算法训练营第三十四天-动态规划-63. 不同路径II
本题与上一题区别不大但由于存在障碍格,导致在计算路径值时,要多考虑一些情况 比如,障碍格在开始与结束位置时,路径直接返回0障碍格在初始的首行与首列时,设置初始值要不同在计算dp值时,要先判断当前格是不…...

在一个sql select中作多个sum并分组
有表如下; 单独的对某一个列作sum并分组,结果如下; 对于表的第7、8行,num1都有值,num2都是null,对num2列作sum、按id分组,结果在id为4的行会显示一个null; 同时对2个列作sum&#x…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...

Elastic 获得 AWS 教育 ISV 合作伙伴资质,进一步增强教育解决方案产品组合
作者:来自 Elastic Udayasimha Theepireddy (Uday), Brian Bergholm, Marianna Jonsdottir 通过搜索 AI 和云创新推动教育领域的数字化转型。 我们非常高兴地宣布,Elastic 已获得 AWS 教育 ISV 合作伙伴资质。这一重要认证表明,Elastic 作为 …...
上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式
简介 在我的 QT/C 开发工作中,合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式:工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...