We are a team - 华为OD统一考试

OD统一考试

题解: Java / Python / C++

alt

题目描述

总共有 n 个人在机房,每个人有一个标号 (1<=标号<=n) ,他们分成了多个团队,需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中,具体的:

  1. 消息构成为 a b c,整数 a、b 分别代表两个人的标号,整数 c 代表指令。
  2. c== 0 代表a和b在一个团队内。
  3. c == 1 代表需要判定 a 和b 的关系,如果 a和b是一个团队,输出一行"we are a team",如果不是,输出一行"we are not a team"。
  4. c 为其他值,或当前行a或b 超出 1~n 的范围,输出 “da pian zi”。

输入描述

  1. 第一行包含两个整数 n,m(1<=n.m<=100000).分别表示有n个人和 m 条消息。
  2. 随后的 m 行,每行一条消息,消息格式为: a b c (1<=a,b<=n, 0<=c<=1)

输出描述

  1. c ==1.根据 a 和 b 是否在一个团队中输出一行字符串,在一个团队中输出 “we are a team”, 不在一个团队中输出 “we are not a team”。
  2. c 为其他值,或当前行 a 或 b 的标号小于 1 或者大于 n 时,输出字符串 “da pian zi”。
  3. 如果第一行 n 和 m的值超出约定的范围时,输出字符串"NULL"。

示例1

输入
5 6
1 2 0
1 2 1
1 5 0
2 3 1
2 5 1
1 3 2

输出
we are a team
we are not a team
we are a team
da pian zi

题解

并查集的简单模板套用

如果对并查集不会,可以通过 https://zhuanlan.zhihu.com/p/93647900 来学习。

Java

import java.util.Scanner;
public class Main {

    private static boolean checkRange(int a, int b, int c) {
        return 1 <= a && a <= 100000 && 1 <= b && b <= 100000 && 0 <= c && c <= 1;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt(), m = scanner.nextInt();
        if (!checkRange(n, m, 0)) {
            System.out.println("NULL");
            return;
        }

        UnionFind uf = new UnionFind(n);
        for (int i = 0; i < m; i++) {
            int a = scanner.nextInt(), b = scanner.nextInt(), c = scanner.nextInt();
            if (checkRange(a, b, c)) {
                if (c == 0) {
                    uf.merge(a, b);
                } else if (uf.find(a) == uf.find(b)) {
                    System.out.println("we are a team");
                } else {
                    System.out.println("we are not a team");
                }
            } else {
                System.out.println("da pian zi");
            }
        }
    }

}

/**
 * 并查集
 *
 * @Description: 学习参考: https://zhuanlan.zhihu.com/p/93647900
 * @Author code5bug
 * @Date 20-10-22
 * @Version 1.0
 **/
class UnionFind {
    // father[2] = 3 表示元素2的父节点是3
    public int[] father;

    public UnionFind(int len) {
        father = new int[len + 1];
        for (int i = 1; i <= len; i++) {
            father[i] = i;
        }
    }

    // 查询 x 的根节点
    public int find(int x) {
        if (x < 0 || x >= father.length) {
            throw new RuntimeException("查询越界");
        }

        // 合并(路径压缩)
        return (x == father[x] ? x : (father[x] = find(father[x])));
    }

    // 合并节点, y 的根节点指向 x 的根节点
    public void merge(int x, int y) {
        int xRoot = find(x), yRoot = find(y);
        father[yRoot] = xRoot;
    }
}

Python

n, m = map(int, input().split())


def check_range(a: int, b: int, c=0) -> bool:
    return 1 <= a <= 100000 and 1 <= b <= 100000 and 0 <= c <= 1


if check_range(n, m):
    fa = [i for i in range(n + 1)]

    def find(x: int) -> int:
        if fa[x] != x:
            fa[x] = find(fa[x])
        return fa[x]

    def merge(x: int, y: int):
        x_root, y_root = find(x), find(y)
        fa[x_root] = y_root

    for _ in range(m):
        a, b, c = map(int, input().split())
        if check_range(a, b, c):
            if c == 0:
                merge(a, b)
            elif find(a) == find(b):
                print("we are a team")
            else:
                print("we are not a team")
        else:
            print("da pian zi")
else:
    print("NULL")

C++

#include <iostream>
#include <vector>

using namespace std;

bool check_range(int a, int b, int c = 0) {
    if(a < 1 || b < 1 || c < 0) return false;
    if(a > 100000 || b > 100000 || c > 1) return false;
    return true;
}


int find(vector<int>& fa, int x) {
    if(fa[x] != x) {
        fa[x] = find(fa, fa[x]);
    }
    return fa[x];
}

int merge(vector<int>& fa, int x, int y) {
    int xRoot = find(fa, x), yRoot = find(fa, y);
    fa[xRoot] = yRoot;
}

int main() {
    int n, m;
    cin >> n >> m;

    if(!check_range(n, m)) {
        cout << "NULL" << endl;
        return -1;
    }

    vector<int> fa(n+1);
    for(int i=0; i<=n; i++) fa[i] = i;

    for(int i=0, a, b, c; i<m; i++) {
        cin >> a >> b >> c;
        if(check_range(a, b, c)) {
            if(c == 0) {
                merge(fa, a, b);
            } else if(find(fa, a) == find(fa, b)) {
                cout << "we are a team" << endl;
            } else {
                cout << "we are not a team" << endl;
            }
        } else {
            cout << "da pian zi" << endl;
        }
    }

    return 0;
}

(并查集)相关练习题

题号题目难易
LeetCode 12021202. 交换字符串中的元素中等
LeetCode 17221722. 执行交换操作后的最小汉明距离中等
LeetCode 947947. 移除最多的同行或同列石头中等
LeetCode 924924. 尽量减少恶意软件的传播困难

🙏整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

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

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

相关文章

HMS SQL注入(CVE-2022-25491)

漏洞描述&#xff1a; 2022年3月15日&#xff0c;CVE收录了编号CVE-2022-25491漏洞&#xff0c;该漏洞为在HMS v1.0版本中存在SQL注入漏洞&#xff0c;该漏洞允许攻击者通过手动调试appointment.php文件中的editid软件参数进行SQL注入攻击。 复现过程&#xff1a; 1.访问ip&…

深入理解Golang:切片的底层机制解析

深入理解Golang&#xff1a;切片的底层机制解析 引言切片的基本概念切片的内部结构内存管理机制切片与数组的对比切片的高级用法性能优化建议案例研究 引言 在现代软件开发中&#xff0c;高效的数据处理和优化的内存管理是每位开发者都需面对的挑战。特别是在使用像Go语言&…

部署一款开源的网站监控工具—Uptime Kuma

项目介绍 项目地址&#xff1a;louislam/uptime-kuma: A fancy self-hosted monitoring tool (github.com) Uptime Kuma是一个开源的网络服务监控工具。它允许用户监视他们的网络服务&#xff0c;以确保其正常运行&#xff0c;并提供有关服务可用性和性能的实时信息。Uptime K…

R503S指纹识别模块的指令系统(一)

1.采集指纹图像 GetImage&#xff08;0x01&#xff09; 功能说明&#xff1a;探测手指&#xff0c;探测到后录入指纹图像存于 ImageBuffer&#xff0c;并返回录入成功确认码&#xff1b;若探测不到手指&#xff0c;直接返回无手指确认码(模块对于每一条指令都快速反应&#xf…

Go 语言如何读取 excel 测试数据,简单易学

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

微信小程序全部内嵌H5遇到的问题记录

微信小程序内嵌H5遇到的问题 问题1&#xff1a;js-sdk的配置h5里面微信公众平台 问题2&#xff1a;业务域名的配置小程序开发微信公众平台 问题3&#xff1a;H5与小程序的消息传递。方案1H5 方案2H5页面小程序开发 方案3H5页面小程序页面 使用H5来开发APP&#xff0c;之后将该H…

2023年度巨献,一图总结2023年最重要的AI相关的产品和技术~共48个产品或技术上榜

原文来自DataLearnerAI官方网站&#xff1a; 2023年度巨献&#xff0c;一图总结2023年最重要的AI相关的产品和技术~共48个产品或技术上榜 | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051703825548892 2022年11月底&#xff0c;ChatGPT横空出世&…

vue-cli3/webpack打包时去掉console.log调试信息

文章目录 前言一、terser-webpack-plugin是什么&#xff1f;二、使用配置vue-cli项目 前言 开发环境下&#xff0c;console.log调试信息&#xff0c;有助于我们找到错误&#xff0c;但在生产环境&#xff0c;不需要console.log打印调试信息&#xff0c;所以打包时需要将consol…

字节跳动内部泄露的前端学习笔记在互联网上大火,在Github标星33K+,完整版赶紧下载

一、入门前端三剑客 1、HTML html 学起来还是挺简单的&#xff0c;无论你是否有编程基础&#xff0c;我觉得都可以快速入门&#xff0c;对于新手&#xff0c;我推荐找个入门的视频看一下&#xff0c;然后跟着视频打代码就可以了&#xff0c;入门教程随便在网上找个免费的视频就…

神经网络:模型部署

【一】模型压缩的必要性与可行性&#xff1f; 模型压缩是指对算法模型进行精简&#xff0c;进而得到一个轻量且性能相当的小模型&#xff0c;压缩后的模型具有更小的结构和更少的参数&#xff0c;可以有效降低计算和存储开销&#xff0c;便于部署在端侧设备中。 随着AI技术的…

浮点数表示法以及相关“小”知识点

浮点数的表示形式 小数点的位置是浮动的。 任意一个二进制数N可 以表示成&#xff1a;N&#xff1d;Sr^j 其中&#xff0c;S为尾数(可正可负)&#xff0c;r为基数(数值)&#xff0c;j是阶码(可正可负)。 1、对一个真值为23.25的十进制数&#xff0c;用浮点数格式表示其原码。 …

C语言——小细节和小知识7

一、逆序字符串 1、递归1 #include <stdio.h> #include <string.h>void ReverseArray(char *str) {char temp *str;//1int len (int)strlen(str);*str *(str len - 1);//2*(str len - 1) \0;//3if(strlen(str 1) > 2)//只要字符串还大于2&#xff0c;就…

uniapp框架——vue3+uniFilePicker+fastapi实现文件上传(搭建ai项目第二步)

文章目录 ⭐前言&#x1f496; 小程序系列文章 ⭐uni-file-picker 组件&#x1f496; 绑定事件&#x1f496; uploadFile api&#x1f496; 自定义上传 ⭐后端fastapi定义上传接口⭐uniapp开启本地请求代理devServer⭐前后端联调⭐总结⭐结束 ⭐前言 大家好&#xff0c;我是ym…

分享72个NodeJs项目源码总有一个是你想要的

分享72个NodeJs项目源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1_bzxbmBlN8ga4-Ci1I0-0w?pwd6666 提取码&#xff1a;6666 项目名称 A lottery webapp …

智慧启航:机场管理系统的革新与飞机航天展馆的视觉盛宴

随着科技的飞速发展&#xff0c;我们的生活方式正在不断地被改变和提升。而在航空领域&#xff0c;这种变化则更加明显。从机场的智慧管理系统大屏&#xff0c;到飞机航天展馆的三维可视化&#xff0c;再到飞机涡轮发动机的3D模型&#xff0c;科技的力量正在带我们进入一个前所…

再谈动态SQL

专栏精选 引入Mybatis Mybatis的快速入门 Mybatis的增删改查扩展功能说明 mapper映射的参数和结果 Mybatis复杂类型的结果映射 Mybatis基于注解的结果映射 Mybatis枚举类型处理和类型处理器 文章目录 专栏精选摘要引言正文动态sql标签ifchoose...when...otherwisewhere、…

电脑开机自动断电,简单4招,快速解决!

“不知道我的电脑最近是怎么回事&#xff0c;每次一开机就会出现自动断电的情况&#xff0c;有什么方法可以解决吗&#xff1f;” 在使用电脑时&#xff0c;由于电源供应不稳定或过热&#xff0c;以及各种硬件问题&#xff0c;可能会导致电脑开机自动断电。遇到这种情况&#x…

CNAS中兴新支点——源代码审计对企业有哪些好处?

源代码扫描&#xff0c;对应用程序进行静态漏洞扫描&#xff0c;分析源代码中存在的安全风险&#xff0c;运行应用于模拟器中对应用进行实时漏洞攻击检测。 你是否了解源代码扫描对企业的好处&#xff1f; 一、源代码扫描&#xff0c;通常能够帮助企业解决这些问题&#xff1…

TinyGPT-V:小而强大,轻量级骨架打造高效多模态大语言模型!

独家作者&#xff08;csdn、掘金、知乎、微信公众号&#xff09;&#xff1a;PaperAgent 每天一篇大模型&#xff08;LLM&#xff09;文章来锻炼我们的思维&#xff0c;简单的例子&#xff0c;不简单的方法&#xff0c;提升自己 一、论文信息 论文题目&#xff1a;TinyGPT-V…

爬虫学习(1)--requests模块的使用

前言 什么是爬虫 爬虫是一种自动化工具&#xff0c;用于从互联网或其他计算机网络上获取数据。它可以模拟人的行为&#xff0c;自动访问网页&#xff0c;提取感兴趣的数据&#xff0c;并将其存储到本地计算机或数据库中。爬虫通常用于搜索引擎、数据分析、信息聚合等领域&…