刷好题,固基础-11

前置知识点:Kruskal算法

详细讲解:Kruskal算法简易教程(附最全注释代码实现)_kruskal算法测试实例-CSDN博客

环游小岛

这是一个关于小岛环游的考验。在这个考验中,有n座小岛分布在海洋中,小岛与小岛之间的距离有近有远。为了到达不同的小岛,你可以选择游泳或者搭乘快艇。
现给出m对小岛之间的距离,距离用 w 来表示你可以通过消耗 w 的体力值从其中一个小岛到达另一个小岛。这个体力值可以是正值,代表需要消耗体力游泳到达;也可以是负值,代表可以搭乘快艇轻松到达。换句话说,正值表示需要付出额外的努力,而负值则表示可以省下体力。
在这个环游计划中,你可以选择在任意一座小岛上休息,休息的时间没有限制。这样可以恢复体力,并为接下来的旅程做好准备。
现在给出了 q 个询问,每个询问包含三个信息:起点、终点和你当前的体力值上限。问题是,能否凭借当前的体力值上限完成从起点到终点的环游计划。

输入格式:

第一行包含两个整数n、m、q ,
接下来 m 行,每行包含三个整数x、y、w,w 代表 x 和 y 两个小岛间的距离,
接下来 q 行,每行包含三个整数x、y、t,问是否能够凭借体力值上限 t 完成从 x 到 y 的环游计划。

1<=n<=1e5,1<=m<=1e5,1<=q<=1e5
1<=x,y<=n,0<=∣w∣<=1e9,0<=t<=1e9

输出格式:

共 q 行,每行根据询问给出答案,若可以完成该询问的环游计划则输出 YES ,反之则输出 NO 。

输入样例:

3 3 3
1 2 1
2 3 2
1 3 3
1 3 2
1 2 0
2 3 1

输出样例:

YES
NO
NO

 思路:Kruskal算法+并查集--通过对每条边的升序排列,从这条边可以走出的最小生成图,通过并查集来判断查询的起,终点是否在一个集合内

//Kruskal
//概论:通过对每条边的升序排列,从这条边可以走出的最小生成图来判断查询是否可靠
//内涵迭代思想
#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+7, inf = 0x3f3f3f3f, mod = 1e9+7, eps = 1e-9;

int fa[N], ans[N];
vector<array<int, 3>> edge;

int find(int x){
    if(fa[x] != x)    fa[x] = find(fa[x]);
    return fa[x];
}

int main(){
    int n, m, q;    cin >> n >> m >> q;
    for(int i = 1; i <= n; ++i)    fa[i] = i;    //初始化
    for(int i = 0; i < m; ++i){
        int x, y, w;    cin >> x >> y >> w;
        edge.push_back({w, x, y});
    }
    sort(edge.begin(), edge.end());    //体力升序排序
    vector<array<int,4>> ask;
    for(int i = 0; i < q; ++i){
        int x, y, t;    cin >> x >> y >> t;
        ask.push_back({t, x, y, i});
    }
    sort(ask.begin(), ask.end());

    int now = 0;
    for(auto [w, x, y] : edge){    //对每一条边
        while(now < ask.size() && w > ask[now][0]){    //当前体力大于需要的体力
            auto [t, st, ed, idx] = ask[now];
            if(find(st) == find(ed))    ans[idx] = 1;    //如果节点已连接,YES
            now++;
        }
        fa[find(x)] = find(y);
    }

    for(int i = now; i < ask.size(); ++i){
        auto [t, st, ed, idx] = ask[i];
        if(find(st) == find(ed))    ans[idx] = 1;
    }

    for(int i = 0; i < q; ++i)
        if(ans[i])    cout << "YES\n";
        else    cout << "NO\n";
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vim使用指南:指令、配置、插件、异常

文章目录 vi / vim命令模式插入模式光标定位复制粘贴删除撤销替换删除查找 底行模式保存退出行号查找多开其他 视图模式注释 异常vim配置vim插件 vi / vim vim的本质是一个编辑器&#xff0c;是一种多模式的编辑器&#xff0c;只能进行读写操作&#xff0c;不能进行编译编辑器…

前端JS必用工具【js-tool-big-box】,时间日期转换学习一

这一小节&#xff0c;我们学习一下 js-tool-big-box 这个npm 前端工具库&#xff0c;关于时间日期格式转换的一部分&#xff0c;后续还会有。 目录 1 安装 2 项目中引入 3 工具使用 3.1 年月日时分秒的单独处理 3.2 以上方法中第一个参数 3.3 日期时间的转换 3.4 更个…

Ollama、FastGPT大模型RAG知识库结合使用案例

参考: https://ollama.com/download/linux https://doc.fastai.site/docs/intro/ https://blog.csdn.net/m0_71142057/article/details/136738997 https://doc.fastgpt.run/docs/development/custom-models/m3e/ https://concise-eater-d47.notion.site/Ollama-Fastgpt-b170…

编程入门(四)【计算机网络基础(由一根网线连接两个电脑开始)】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言两个电脑如何互连呢&#xff1f;集线器、交换机与路由器总结 前言 当你有…

基于SpringBoot的“外卖点餐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“外卖点餐系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能图 用户功能界面 订单管理界面 配送单管…

Java 笔记 01:Java 概述,MarkDown 常用语法整理

一、前言 记录时间 [2024-04-18] 昨天整理完 Docker 基础后略微思索了一下&#xff0c;还是决定把 Java 捡起来&#xff0c;系统地学习一遍&#xff0c;参考的学习课程是狂神说 Java 零基础&#xff0c;真诚感激此系列视频对笔者的帮助。 零基础可以学 Java 吗&#xff1f;只要…

【创建型模式】建造者模式

一、建造者模式概述 建造者模式定义&#xff1a;将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同得表示。(对象创建型模式)。 建造者模式分析&#xff1a; 1.将客户端与包含多个部件得复杂对象得创建过程分离&#xff0c;客户端无需知道复杂对象…

vue快速入门(二十九)echarts在vue中的使用

注释很详细&#xff0c;直接上代码 上一篇 新增内容 echarts.js的下载途径echarts的饼图示范 echarts.js&#xff0c;点击跳转&#xff0c;右键另存即可 源码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><m…

BEV| lift-splat-shoot 运行配置

Lift, splat, shoot: Encoding images from arbitrary camera rigs by implicitly unprojecting to 3d

6.C++:继承

一、继承 //1.类中的保护和私有在当前类中没有差别&#xff1b; //2.在继承后的子类中有差别&#xff0c;private在子类中不可见&#xff0c;所以用protected&#xff1b; class person { public:void print(){cout << "name:" << _name << endl;c…

《乱弹篇(29)崇州寻兰》

几天前天气骤然暴热&#xff0c;致使本老龄笔者血氧饱和度急剧下降至89&#xff0c;心率加速高达110至120&#xff0c;晚上盖床夏被也觉浑身燥热&#xff0c;很不舒服&#xff0c;彻夜难眠&#xff0c;便有一种“快走了”的不祥预感袭上心头。其实&#xff0c;我真的祈盼能心肌…

计算机视觉——基于OpenCV和Python进行模板匹配

模板匹配&#xff1f; 模板匹配是它允许在一幅较大的图像中寻找是否存在一个较小的、预定义的模板图像。这项技术的应用非常广泛&#xff0c;包括但不限于图像识别、目标跟踪和场景理解等。 目标和原理 模板匹配的主要目标是在一幅大图像中定位一个或多个与模板图像相匹配的…

隧道中心线提取

作者&#xff1a;迅卓科技 简介&#xff1a;本人从事过多项点云项目&#xff0c;并且负责的项目均已得到好评&#xff01; 公众号&#xff1a;迅卓科技&#xff0c;一个可以让您可以学习点云的好地方 重点&#xff1a;每个模块都有参数如何调试的讲解&#xff0c;即调试某个参数…

HackMyVM-BaseME

目录 信息收集 arp nmap WEB web信息收集 gobuster hydra 目录检索 ssh 提权 get user sudo base64提权 get root 信息收集 arp ┌─[rootparrot]─[~/HackMyVM] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168…

​波士顿动力发布全新人形机器人:Atlas

4月16日&#xff0c;波士顿动力&#xff08;Boston Dynamics&#xff09;发布了《再见&#xff0c;液压Atlas》视频&#xff0c;正式宣告其研发的液压驱动双足人形机器人Atlas退役。 在视频的结尾&#xff0c;Atlas深深鞠躬&#xff0c;之后还有一句话“直到我们再次相遇&…

ChatGPT及GIS、生物、地球、农业、气象、生态、环境科学领域案例

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

Count the Values of k

目录 题目总览 思路 参考代码 原题链接&#xff1a; CF1933C Turtle Fingers: Count the Values of k 题目总览 # Turtle Fingers: Count the Values of k ## 题面翻译 给你三个**正**整数 $a$ 、 $b$ 和 $l$ ( $a,b,l>0$ )。 可以证明&#xff0c;总有一种方法可以选择*…

如何用ChatGPT进行论文撰写?

原文链接&#xff1a;如何用ChatGPT进行论文撰写&#xff1f;https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247601619&idx1&snb686fbe87dedfac2df3a6afe780b2ffe&chksmfa820c34cdf5852251dca64597024ea62ddbde280086535ec251f4b62b848d9f9234688384e6…

【论文速读】| 大语言模型是边缘情况模糊测试器:通过FuzzGPT测试深度学习库

本次分享论文为&#xff1a;Large Language Models are Edge-Case Fuzzers: Testing Deep Learning Libraries via FuzzGPT 基本信息 原文作者&#xff1a;Yinlin Deng, Chunqiu Steven Xia, Chenyuan Yang, Shizhuo Dylan Zhang, Shujing Yang, Lingming Zhang 作者单位&…

js高级 笔记02

目录 01 object提供的一些静态方法 02 词法作用域 03 作用域链 04 arguments的使用 05 开启严格模式 06 高阶函数 07 闭包 01 object提供的一些静态方法 Object.create() 对象继承 Object.assign(对象1,对象2) 对象合并 可以将对象2 里面的可枚举属性和自身的属性合并到…