2024第三届大学生算法大赛 真题训练3 解题报告 | 珂学家

news2024/9/22 15:35:23

前言

在这里插入图片描述


题解


C. 洞穴探险

在这里插入图片描述

题目描述:

简单来说,就是 在一个无向图中,两个点之间关系 (存在多条简单路径,一条简单路径,不联通), 请判断两点之间的关系。

思路: 并查集 + tarjan割边

对于通联和非联通,其实很简单,只要简单的并查集即可。

但是仅有一条简单路径,多条简单路径的情况,就感觉很头痛。

所以呢,可以从删边的角度出发.

如果 A 到 B 存在一条简单路径,其任意一条边删去,都会导致 A B 不联通,那就是 O N E 关系,否则 M O R E 关系 如果A到B存在一条简单路径,其任意一条边删去,都会导致AB不联通,那就是ONE关系,否则MORE关系 如果AB存在一条简单路径,其任意一条边删去,都会导致AB不联通,那就是ONE关系,否则MORE关系

而这样的删边,不就是割边吗?

因此引入2个并查集

  • 用于维护图的联通性判定 S1
  • 由割边图主导的联通性判定 S2

那么如果节点A,B属于S1

  1. A,B属于S2的同组,则A,B为ONE关系
  2. A,B不属于S2的同组,那么A,B存在多条简单路径,即为More

特别要注意:
该图是森林 该图是森林 该图是森林


#include <bits/stdc++.h>

using namespace std;

struct Dsu {
    Dsu(int n) : n(n), arr(n, -1) {}
    int find(int u) {
        if (arr[u] == -1) {
            return u;
        }
        return arr[u] = find(arr[u]);
    }
    void merge(int u, int v) {
        int a = find(u), b = find(v);
        if (a != b) {
            arr[a] = b;
        }
    }
    int n;
    vector<int> arr;
};

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);

    int t;
    cin >> t;
    while (t-- > 0) {
        int n, m, q;
        cin >> n >> m >> q;

        vector<vector<int>> g(n);
        for (int i = 0; i < m; i++) {
            int u, v;
            cin >> u >> v;
            u--; v--;
            g[u].push_back(v);
            g[v].push_back(u);
        }

        Dsu dsu1(n);
        Dsu dsu2(n);

        int seqno = 0;
        vector<bool> vis(n, false);
        vector<int> dfn(n, 0), low(n, 0);
        function<void(int, int)> tarjan;
        tarjan = [&](int u, int fa) {
            vis[u] = true;
            dfn[u] = low[u] = ++seqno;
            for (int v: g[u]) {
                if (!vis[v]) {
                    tarjan(v, u);
                    low[u] = min(low[u], low[v]);
                    if (low[v] > dfn[u]) {
                        dsu2.merge(u, v);
                    }
                } else if (v != fa) {
                    low[u] = min(low[u], dfn[v]);
                }
                dsu1.merge(u, v);
            }
        };

        for (int i = 0; i < n; i++) {
            if (!vis[i]) {
                tarjan(i, -1);
            }
        }
        
        while (q-- > 0) {
            int u, v;
            cin >> u >> v;
            u--; v--;
            if (dsu1.find(u) == dsu1.find(v) && dsu2.find(u) != dsu2.find(v)) {
                cout << "MORE THAN ONE" << '\n';
            } else if (dsu1.find(u) == dsu1.find(v)) {
                cout << "ONE" << '\n';
            } else {
                cout << "NONE" << '\n';
            }
        }

    }

    return 0;
}

写在最后

在这里插入图片描述

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

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

相关文章

Java学习Day41:手刃青背龙!(spring框架之事务)

1.spring事务概念 在数据层和业务层保证一系列数据库操作原子性成功失败&#xff01;&#xff08;相比事务可以在业务层开启&#xff09; 1.事务定义&#xff1a;关键字&#xff1a;Transactional&#xff08;一般写在接口上&#xff09; 2.事务管理器&#xff1a;在JdbcCon…

vscode ssh离线远程连接ubuntu调试

遇见问题&#xff1a; 1 ssh连接上无法启动服务器的虚拟环境&#xff1b; 2 ssh连接上启动服务器的虚拟环境后无法打断点&#xff1b; 对于问题需要参考下面连接安装python和debugy的插件拓展&#xff0c;并且配置json文件link。VSCode - 离线安装扩展python插件教程_vscode…

web 自动化测试框架 TestCafe 安装和入门使用

一、TestCafe 介绍&#xff1a; TestCafe 是一款基于 Node.js 的端到端 Web 自动化测试框架&#xff0c;支持 TypeScript 或 JavaScript 来编写测试用例&#xff0c;运行用例&#xff0c;并生成自动化测试报告。 TestCafe 兼容 Windows&#xff0c;MacOS 和 Linux 系统&#x…

基于C++实现(控制台+界面)通讯录管理系统

个人通讯录管理系统 问题描述&#xff1a; 主要内容&#xff1a; 个人通讯录是记录了同学&#xff08;包含一起上学的学校名称&#xff09;、同事&#xff08;包含共事的单位名称&#xff09;、朋友&#xff08;包含认识的地点&#xff09;、亲戚&#xff08;包含称呼&#…

国家级|加速科技成功入选国家级专精特新“小巨人”企业

9月6日&#xff0c;浙江省通过的第六批专精特新“小巨人”企业名单在省经济和信息化厅官网完成公示&#xff0c;经过严格评审&#xff0c;杭州加速科技有限公司正式获国家级专精特新“小巨人”企业认定。 专精特新”小巨人”企业具备专业化、精细化、特色化、新颖化特征&#x…

“我”变小了但更强了!英伟达发布最新大语言模型压缩技术,无损性能且提升数倍!

1. 摘要 英伟达研究团队提出了一份全面报告&#xff0c;详细介绍了如何使用剪枝和蒸馏技术将Llama 3.1 8B和Mistral NeMo 12B模型分别压缩至4B和8B参数。他们探索了两种不同的剪枝策略&#xff1a;深度剪枝和联合隐藏/注意力/MLP&#xff08;宽度&#xff09;剪枝。 研究人员…

Adoptium Temurin JDK 的下载

在当今的软件开发领域&#xff0c;Java 无疑是最受欢迎和广泛使用的编程语言之一。Java 开发工具包&#xff08;JDK&#xff09;是任何 Java 开发者不可或缺的工具&#xff0c;它提供了编译、调试和运行 Java 应用程序所需的所有工具和库。Eclipse Temurin 是一个流行的开源 JD…

网络药理学:分子动力学模拟入门、gromacs能量最小化

推荐视频 B站&#xff1a; 讲的都是有效的概论&#xff0c;其中关于分子动力学模拟归纳的三步挺有用的。 B站&#xff1a;也没有讲清楚关于分子对接后得到的文件该如何处理。 B站&#xff1a; 需要用的是autodock vina&#xff0c;而且走过一遍up主之前分子对接的视频才比较…

mysql笔记3(数据库、表和数据的基础操作)

文章目录 一、数据库的基础操作1. 显示所有的仓库(数据库)2. 创建数据库注意(命名规范)&#xff1a; 3. 删除数据库4. 查看创建数据库的SQL5. 创建数据库时跟随字符编码6. 修改数据库的字符编码 二、表的基础操作1. 引入表的思维2. 引用数据库3. 查看该数据库下面的表4. 创建表…

终端安全如何防护?一文为你揭晓答案!

终端安全防护是确保组织内部网络及其连接设备免受威胁的关键措施。 以下是终端安全防护的一些核心方法&#xff1a; 1. 资产管理与识别 摸清家底&#xff1a;识别所有连接到网络的终端设备及其状态&#xff0c;包括硬件和软件配置。 资产分类&#xff1a;确定哪些资产最为关…

华三(H3C)HDM服务器硬件监控指标解读

在当今日益复杂的IT环境中&#xff0c;服务器的稳定运行对于保障业务的连续性至关重要。华三&#xff08;H3C&#xff09;作为知名的网络设备供应商&#xff0c;其HDM&#xff08;Hardware Diagnostic Module&#xff09;技术为服务器硬件的监控提供了强有力的支持。监控易作为…

如何使用SSHFS通过SSH挂载远程文件系统?

SHFS&#xff08;SSH 文件系统&#xff09;是一款功能强大的工具&#xff0c;它允许用户通过 SSH 挂载远程文件系统&#xff0c;从而提供一种安全便捷的方式来访问远程文件&#xff0c;就像访问本地文件一样。本文将引导您完成使用 SSHFS 挂载远程文件系统的过程&#xff0c;为…

【自动化与控制系统】SCI一区TOP神刊!最快19天accept、稳定检索!

期刊解析 &#x1f6a9;本 期 期 刊 看 点 &#x1f6a9; 国人发文占比第一&#xff0c;TOP刊 审稿友好&#xff0c;审稿速度快 自引率9.8% 今天小编带来计算机领域SCI快刊的解读&#xff01; 如有相关领域作者有意投稿&#xff0c;可作为重点关注&#xff01; 01 期刊信息…

pytlsd在Win10下编译与使用

下载pytlsd项目,GitHub - iago-suarez/pytlsd: Python transparent bindings for LSD (Line Segment Detector) CMake配置 Windows 10,Visual Studio 2019下编译 Release版本生成文件包括: 测试代码: # -*- coding: utf-8 -*- import cv2 import matplotlib.pyplot as p…

CATH数据库数据下载

CATH数据库提供了多种类型的数据供用户下载,涵盖了蛋白质的结构域分类、同源性分析、功能注释等方面。以下是CATH数据库提供的一些主要数据类型及其解释: http://www.cathdb.info/download 1. 分类数据(Classification Data) 文件:如cath-domain-list.txt内容:包含CATH数…

jvm的各种性能检测工具

1: jvm 的性能诊断工具 1.1.&#xff1a;Jstat 这个的全称是JVM Statistics Monitoring Tool&#xff0c;说白了就是统计jvm的各种指标的&#xff0c;我们这边主要关注内存使用指标&#xff0c;一般我们后面要跟上pid的进程 jstat -gc pid jstat -gcutil pid最终的这些结果命…

教师节特辑:AI绘制的卡通人物,致敬最可爱的人‍

【编号&#xff1a;9】教师节到了&#xff0c;今天我要分享一组由AI绘制的教师节主题卡通人物插画&#xff0c;每一幅都充满了对老师的敬意和爱戴。让我们一起用这些可爱的卡通形象&#xff0c;向辛勤的园丁们致敬&#xff01; &#x1f393;【教师形象】 这…

ES6标准-【一】【学习ES6看这一篇就够了!!】

目录 顶层对象的属性 ES5中的顶层对象 ES6中的顶层对象 数组的解构赋值 默认值 对象的解构赋值 默认值 注意点&#xff1a; 字符串的解构赋值 数值和布尔值的解构赋值 函数参数的解构赋值 ES6中的圆括号问题 不能使用圆括号的情况 变量声明语句 函数参数 赋值语…

【JS】深拷贝与浅拷贝

深拷贝与浅拷贝 浅拷贝实现浅拷贝的方法扩展运算符 深拷贝实现深拷贝的方法递归JSON.parse(JSON.stringify()) 深拷贝和浅拷贝都是处理对象或数据的复制操作 浅拷贝 浅拷贝创建一个的对象&#xff0c;复制的是原对象的引用新对象与原对象共用一个相同的内存地址&#xff0c;因…

分布式算法-Paxos、Raft、ZAB复习

目录 1. Paxos算法 1.1 算法流程 1.2 接受者选举规则 2. Raft算法 2.1 Leader选举 2.2 安全性 3. ZAB算法 3.1 ZAB协议介绍 3.2 消息广播 3.3 崩溃恢复 3.4 数据同步 1. Paxos算法 Paxos 算法是 Leslie Lamport 在 1990 年提出的&#xff0c;经典且完备的分布式一致…