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的父节点是3public 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 <= 1if 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_rootfor _ 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. 尽量减少恶意软件的传播困难

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

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

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

相关文章

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

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

ArkUI按钮组件深入学习:通过点击按钮实现图片大小调整效果

文章目录 前言Button组件控制 Button 样式实现点击按钮改变图片大小文章总结技术回顾前言 在前面几节课中,我们已经学习了 ArkUI 提供的一些常见组件,通过一个小案例实现了 image text 和 text input 组件的使用。我们成功地让用户通过输入来改变图片的宽度,从而实现了一个…

bat命令清理Window应用注册表(Unity开发Window应用)

bat命令清理Window应用注册表&#xff08;Unity开发Window应用&#xff09; 介绍出现的问题方案一方案二方案二解决方案1. 首先使用【Win】【R】组合快捷键&#xff0c;快速打开运行命令框&#xff0c;在打开后面键入命令&#xff1a;【Regedit】2. 完后后按回车键&#xff08;…

(一)window使用VMware运行Centos7

前言&#xff1a;为了学习微服务环境搭建&#xff0c;需要自己重新弄一套linux环境&#xff0c;捡起几年前使用VMware虚拟机运行linux的知识。。。不想买云盘&#xff0c;好贵 一、下载安装包 WMware安装包下载 附赠一个破解码&#xff1a;JU090-6039P-08409-8J0QH-2YR7F 如…

【Unity美术】Unity工程师对3D模型需要达到的了解【一】

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

C语言,指针链表详解解说及代码示例

C语言&#xff0c;指针链表详解解说及代码示例 指针链表是一种常用的数据结构&#xff0c;用于存储和组织数据。它由一系列节点组成&#xff0c;每个节点包含数据和一个指向下一个节点的指针。通过这种方式&#xff0c;可以动态地添加、删除和访问节点&#xff0c;实现灵活的数…

探索微软Edge:使用方法和心得分享

学习目标&#xff1a; 了解微软Edge的基本功能和使用方法。掌握在微软Edge上进行浏览、搜索和书签管理的技巧。学习如何使用微软Edge进行隐私和安全管理。探索微软Edge的扩展和其他高级功能。 学习内容&#xff1a; 微软Edge的简介&#xff1a;了解微软Edge的起源、特点和与其…

需求:多笔流水的金额分配给多个订单,确保流水总金额和订单总金额一致

&#x1f4da;目录 需求业务解释解决代码效果 需求 按照一定规则将多笔流水的金额分配给多个订单&#xff0c;确保流水总金额和订单总金额一致。 业务解释 之前系统做了个功能&#xff0c;允许对订单进行录错退款&#xff0c;并且重新关联新的订单&#xff0c;审核通过完成后…

logback1.2.3版本中日志文件时间自定义

假如在logback配置文件中存在以下配置 <appender name"custom_log_file" class"ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePatter…

逻辑卷学习

磁盘分区的缺点 1.无法扩容 2.必须使用的空间 3.没有备份: 一、逻辑卷的定义 LVM 是 Logical Volume Manager 的简称&#xff0c;译为中文就是逻辑卷管理。它是 Linux 下对硬盘分区的一种管理机制。LVM 适合于管理大存储设备&#xff0c;并允许用户动态调整文件系统的大小…

macOS编译ckb-next

macOS x86 成功&#xff0c;下一步&#xff0c;测试&#xff1a;m1、m2、m3 。 1、Homebrew # 三选一 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" # /bin/bash -c "$(curl -fsSL https://raw.gith…

Android Camera相关类功能整理

1.Camera Java相关类 代码目录&#xff1a;frameworks/base/core/java/android/hardware/camera2/ CameraManager&#xff1a;camera系统服务管理类&#xff0c;用于监测、获取特征值和连接Camera设备。 CameraManager.CameraManagerGlobal:全局camera Manager实例&#xff…

Python 中的异常处理

Python 中的异常处理(Exceptions Handling in Python) 文章目录 Python 中的异常处理(Exceptions Handling in Python)Introduction 导言Python 中的异常处理结构 Exceptions Handling Structure in Python为什么我们需要 Finally 块&#xff1f; Introduction 导言 在编程过程…

PicGo+GitHub搭建免费图床

PicGoGitHub搭建免费图床 步骤 1: 安装 PicGo步骤 2:创建图床仓库步骤 3: 配置 GitHub Token步骤 4: 配置 PicGo步骤 5: 上传图片步骤 6: 访问图片 使用 GitHub 作为图床的优势在于免费、稳定且具有版本控制功能&#xff0c;特别适合个人博客、小型项目等。PicGo作为一个开源的…

Java注解之@Autowired,一文掌握@Autowired注解知识(3)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

Linux可执行文件动态库依赖

可执行文件动态库依赖 在执行程序时&#xff0c;经常遇到 ./LinuxApp.exe: error while loading shared libraries: libmodbus.so.5: cannot open shared object file: No such file or directory 查看系统的共享库缓存&#xff0c;以确定库的安装路径 ldconfig -p 查看当前的…

JS作用域:全局作用域,函数作用域,块级作用域

JS作用域&#xff1a;全局作用域&#xff0c;函数作用域&#xff0c;块级作用域 背景作用域全局作用域函数作用域块级作用域通过调用栈分析块级作用域开发者工具查看作用域选项卡示例 背景 由于 JavaScript 存在变量提升这种特性&#xff0c;从而导致很多与直觉不符的代码&…

Springcloud Alibaba 使用Canal将MySql数据实时同步到Elasticsearch

本篇文章在Springcloud Alibaba使用Canal将Mysql数据实时同步到Redis保证缓存的一致性-CSDN博客 基础上使用canal将mysql数据实时同步到Elasticsearch。 1. 数据库准备 CREATE DATABASE /*!32312 IF NOT EXISTS*/shop /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8m…

117. 填充每个节点的下一个右侧节点指针 II

层序遍历&#xff0c;有点类似这道题。 104. 二叉树的最大深度 /* // Definition for a Node. class Node {public int val;public Node left;public Node right;public Node next;public Node() {}public Node(int _val) {val _val;}public Node(int _val, Node _left, Node…

Spring的Bean你了解吗

Bean的配置 Spring容器支持XML(常用)和Properties两种格式的配置文件 Spring中XML配置文件的根元素是,中包含了多个子元素&#xff0c;每个子元素定义了一个Bean,并描述了该Bean如何装配到Spring容器中 元素包含了多个属性以及子元素&#xff0c;常用属性及子元素如下所示 i…