CF1851G-Vlad and the Mountains

news/2025/11/23 23:03:32/文章来源:https://www.cnblogs.com/NDAKJin/p/19261779

CF1851G-Vlad and the Mountains

题目大意

一张无向图上有 \(n\) 个结点,每个节点有一个高度 \(h_i\) 。从结点 \(i\) 到 结点 \(j\) 的能量花费是 \(h_j-h_i\) 。如果途中能量降到零以下,则无法从 \(i\) 走到 \(j\)

一共有 \(q\) 次询问,能否初始拥有 \(e\) 点能量的情况下,从 \(a\) 结点走到 \(b\) 结点。

\(Hint\)

不难发现,题目的约束条件是,\(a\)\(b\) 是否存在一条路径上所有点高度都不超过 \(e+h_a\) 的路径。

题解

开始先设立一张空图,按照点的高度 \(h_i\) 和 查询的高度限制 \(h_a+e\) 升序排序所有点和查询。

· 如果 \(pop\) 出了点,那么就并查集连接这个点与其所有高度小于等于该点的结点。

· 如果 \(pop\) 出了查询,那么直接查询当前 \(a\)\(b\) 是否连通,连通则满足条件,不连通则不满足条件。

#include<bits/stdc++.h>
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define umap unordered_map
#define endl '\n'
using namespace std;
using i128 = __int128;
const int mod =1e9+7;
template <typename T>void read(T&x){x=0;int f = 1;char c=getchar();for(;!isdigit(c);c=getchar())if(c=='-')f=-1;for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);x*=f;
}
template <typename T>void print(T x) {if (x < 0) { putchar('-'); x = -x; }if (x > 9) print(x / 10);putchar(x % 10 + '0');
}
#define int long long
class UnionFind {
public:vector<int> parent; UnionFind(int n){parent.resize(n);for (int i = 0; i < n; ++i) {parent[i] = i;  }}int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]);}return parent[x];}void join(int x, int y) {int rootX = find(x);int rootY = find(y);if (rootX != rootY) {parent[rootX]=rootY;}}
};
const int N=500005;
const int M=2000005;
vector<int> G[200005];
inline void solve()
{int n,m;cin>>n>>m;vector<int> h(n+1),vis(n+1);UnionFind un(n+1);priority_queue<pair<int,int> ,vector<pair<int,int>> ,greater<pair<int,int>>> nn;priority_queue<tuple<int,int,int,int> ,vector<tuple<int,int,int,int>> ,greater<tuple<int,int,int,int>>> mm;for(int i=1;i<=n;i++) {cin>>h[i];G[i].clear();nn.push({h[i],i});}for(int i=1;i<=m;i++){int u,v;cin>>u>>v;G[u].push_back(v);G[v].push_back(u);}int q;cin>>q;vector<int> ans(q+1);for(int i=1;i<=q;i++){int u,v,e;cin>>u>>v>>e;mm.push({e+h[u],u,v,i});}while(!nn.empty()){auto [H,i]=nn.top();nn.pop();while(!mm.empty()){auto [h,u,v,j]=mm.top();if(h>=H) break;if(un.find(u)==un.find(v)){ans[j]=1;}else{ans[j]=0;}mm.pop();}vis[i]=1;for(auto v:G[i]){if(vis[v]) {un.join(i,v);}}}while(!mm.empty()){auto [h,u,v,j]=mm.top();if(un.find(u)==un.find(v)){ans[j]=1;}else{ans[j]=0;}mm.pop();}for(int i=1;i<=q;i++){if(ans[i]) cout<<"YES"<<endl;else cout<<"NO"<<endl;}
}signed main()
{ios;int T=1;cin>>T;for(;T--;) solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/974326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java环境下HBase存储方案如何设计

在Java环境下设计Hbase存储方案,需要考虑以下几个方面: 1. 环境准备安装Hbase:首先需要在Java环境中安装Hbase,可以通过下载Hbase安装包或使用包管理工具(如Maven或Gradle)进行安装。 配置Hbase:根据实际需求配…

STM32Hal库学习11.23

STM32Hal库学习11.23 1.使用Printf重定义函数时,如果发现已经定义了fputc函数,但是仍没有输出,但是不报错,可能是没有定义__io_putchar。 // 实现__io_putchar函数,用于系统调用层的输出重定向 int __io_putchar(…

Winre.wim

winre Winre.wim 分卷压缩 Winre_2.7z.001 0cd627631df742bbc174c4594d7ce2b1Winre_2.7z.002 e086c1c40a7241b29fd90674561c19a5

4sapicom生成式 AI 驱动下的智能聊天机器人 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

KEYDIY PAK06-TB Phone As Key: Smart Keyless Car Key for European American Vehicles

Problem: The Limitations of Traditional Car Keys In the European and American markets, physical car keys have long been a source of frustration. Whether you’re a car owner juggling bulky remotes, fobs…

4.典型的分治算法

4.1选最大与最小 1.选择问题 概念问题 选最大问题:顺序比较伪码:同时选最大最小问题: 通常算法:先选出最大数,再从剩下的n-1个数里选最小数算法 分组算法:两两数分成一组,每组进行比较,在所有大的数+轮空数里选…

Serilog 日志库简单实践(三)集中式日志与分析平台 Sinks(.net8)

本文主要介绍了集中式日志与分析平台 Sinks,并通过示例项目简单演示了它们的用法,供参考。〇、前言 前文已经介绍过什么是 Serilog,以及其核心特点,详见:https://www.cnblogs.com/hnzhengfy/p/19167414/Serilog_b…

数论部分

目录质数 约数 欧拉函数 快速幂 扩展欧几里得算法 组合数 博弈论质数 分解质因数 一个数最小的因子一定是质数。for (int i = 2; i <= x / i; i ++ )if (x % i == 0){int s = 0;while (x % i == 0) x /= i, s ++ ;c…

Java的ConcurrentModificationException异常介绍和解决方案

关于ConcurrentModificationException 异常介绍 在一个线程遍历集合的时候(如ArrayList,HashMap),结构被修改(如remove, add),就会抛出这个异常。 是一个fail fast机制,为了在并发修改的时候发现问题,而不是返…

深入理解 Dart 中的 const 与 final:编译时常量与运行时常量

在 Dart 的开发中,我们频繁地使用 const 和 final 来声明变量。表面上看,它们都用于创建“不可变”的变量,但背后的机制却有着本质的区别。这种区别直接影响着程序的性能和内存分配。本文将深入探讨这两者的不同,并…

python: 缩放图片

一,代码 import base64 import cv2 import numpy as np from PIL import Image import io from PIL import Image, ImageFilter from io import BytesIOdata_url = "data:image/png;base64,iVBORw0KGgoAAAANSUhE…

java和python做出什么

Java 和 Python 是两种非常流行的编程语言,它们在不同的应用场景中发挥着重要作用。下面我将从 语言特性、应用场景 和 代码示例 三个方面来详细说明 Java 和 Python 的作用。一、Java 和 Python 的语言特性 1. Java类…

java和linux

Java 和 Linux 是两个不同的技术栈,但它们在系统开发、自动化脚本、服务器管理等领域有密切的联系。以下是关于 Java 和 Linux 的一些关键点和常见用法:一、Java 与 Linux 的关系Java 是一种编程语言,用于开发桌面应…

湖南工程学院 学科实践与创新协会电气部 幕后揭示

第一次为其他学校出的题目~献给挚爱的你的不思议之国幕后揭示 题面地址:https://www.cnblogs.com/Reisentyan/p/19261758 现在时间:\([2025/11/20\) \(23:47]\) 将揭示—— 幕后真相 本场比赛难度预计:Easy - A, …

KEYDIY PAK06-ZB Phone As Key: Replace Your Car Key with Your Smartphone for European/American Cars

The Pain of Traditional Keys: Why Your Garage and Pocket Deserve a Upgrade In the age of smartphones and smart homes, traditional car keys feel increasingly outdated. Whether you’ve mislaid your physi…

湖南工程学院 学科实践与创新协会电气部 新生选拔赛

湖南工程学院新生选拔赛 赛前提醒 在完成本题目时,除抄袭外允许采用任何方式。 最终人员录取将依据所提交代码的质量进行评定,请各位认真对待。 如发现任何抄袭行为,将立即取消参与资格。 题目要求 提交要求 …… 请…

It Calculus

Brownian Motion Wiener Process \(\newcommand{\E}{\mathbb{E}}\newcommand{\Var}{\text{Var}}\)我们熟悉作为离散随机过程的“随机游走”。这指的是:给定一列自然数下标的i.i.d.随机变量\(X_t\),其中\(X_t\)有\(1/…

20232412 2024-2025-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 本实践目标是掌握metasploit的用法。 下载官方靶机Metasploitable2,完成下面实验内容。 (1)前期渗透 (2)Vsftpd源码包后门漏洞(21端口) (3)SambaMS-RPC Shell命令注入漏洞(端口139) (4)Java R…

20232309 2025-2026-1 《网络与系统攻防技术》实验六实验报告

1.实验内容 1.1实验任务前期渗透主机发现(可用Aux中的arp_sweep,search一下就可以use) 端口扫描:可以直接用nmap,也可以用Aux中的portscan/tcp等。 选做:也可以扫系统版本、漏洞等。Vsftpd源码包后门漏洞(21端口…

2025 ICPC 西安区域赛 VP

啊吧啊吧队友是xd和zcr(以后也是),玩的是辅助位,被两位✌带飞了前言 上大学后的第三次线下一起打。 xd之前说肯定会越打越好。 还真是。 记 微积分习题课看完自己的卷子就溜了,然后和zcr一起刷创高,在学校里随机…