We are a team - 华为OD统一考试
OD统一考试
题解: Java / Python / C++

题目描述
总共有 n 个人在机房,每个人有一个标号 (1<=标号<=n) ,他们分成了多个团队,需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中,具体的:
- 消息构成为 a b c,整数 a、b 分别代表两个人的标号,整数 c 代表指令。
- c== 0 代表a和b在一个团队内。
- c == 1 代表需要判定 a 和b 的关系,如果 a和b是一个团队,输出一行"we are a team",如果不是,输出一行"we are not a team"。
- c 为其他值,或当前行a或b 超出 1~n 的范围,输出 “da pian zi”。
输入描述
- 第一行包含两个整数 n,m(1<=n.m<=100000).分别表示有n个人和 m 条消息。
- 随后的 m 行,每行一条消息,消息格式为: a b c (1<=a,b<=n, 0<=c<=1)
输出描述
- c ==1.根据 a 和 b 是否在一个团队中输出一行字符串,在一个团队中输出 “we are a team”, 不在一个团队中输出 “we are not a team”。
- c 为其他值,或当前行 a 或 b 的标号小于 1 或者大于 n 时,输出字符串 “da pian zi”。
- 如果第一行 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 1202 | 1202. 交换字符串中的元素 | 中等 |
| LeetCode 1722 | 1722. 执行交换操作后的最小汉明距离 | 中等 |
| LeetCode 947 | 947. 移除最多的同行或同列石头 | 中等 |
| LeetCode 924 | 924. 尽量减少恶意软件的传播 | 困难 |
🙏整理题解不易, 如果有帮助到您,请给点个赞 ❤️ 和收藏 ⭐,让更多的人看到。🙏🙏🙏
相关文章:
We are a team - 华为OD统一考试
OD统一考试 题解: Java / Python / C 题目描述 总共有 n 个人在机房,每个人有一个标号 (1<标号<n) ,他们分成了多个团队,需要你根据收到的 m 条消息判定指定的两个人是否在一个团队中,具体的: 消息构成为 a b …...
NFC物联网智慧校园解决方案
近场通信(Near Field Communication,NFC)又称近距离无线通信,是一种短距离的高频无线通信技术,允许电子设备之间进行非接触式点对点数据传输交换数据。这个技术由免接触式射频识别(RFID)发展而来,并兼容 RFID,主要用于…...
鸿蒙系列--组件介绍之容器组件
一、Badge 描述:给其他组件添加标记 子组件:支持单个子组件 1.创建数字标记 Badge(value: {count: number, position?: BadgePosition, maxCount?: number, style: BadgeStyle}) 2.创建字符串标记 Badge(value: {value: string, position?: Badge…...
perl使用find函数踩坑
前言 写了一个脚本可以同时检查多个仿真log文件,并生成html表格。按照文件修改时间从新到旧排序。但是一直无法使用stat函数获取修改时间。 结论:find函数会改变程序执行的当前目录,find(\&process_files, $dir);函数是在$dir目录下运行…...
Java IDEA JUnit 单元测试
JUnit是一个开源的 Java 单元测试框架,它使得组织和运行测试代码变得非常简单,利用JUnit可以轻松地编写和执行单元测试,并且可以清楚地看到哪些测试成功,哪些失败 JUnit 还提供了生成测试报告的功能,报告不仅包含测试…...
深入理解 c++ 函数模板
函数模板是C中的一种强大特性,它允许程序员编写一个可以处理多种数据类型的函数。通过使用模板,我们可以编写一次函数,然后在多种数据类型上使用它,这大大提高了代码的复用性。 1. 基本概念 函数模板是一种参数化类型的工具&…...
系列十二、Linux中安装Zookeeper
一、Linux中安装Zookeeper 1.1、下载安装包 官网:Index of /dist/zookeeper/zookeeper-3.4.11 我分享的链接: 链接:https://pan.baidu.com/s/14Hugqxcgp89f2hqGWDwoBw?pwdyyds 提取码:yyds 1.2、上传至/opt目录 1.3、解…...
k8s之陈述式资源管理
1.kubectl命令 kubectl version 查看k8s的版本 kubectl api-resources 查看所有api的资源对象的名称 kubectl cluster-info 查看k8s的集群信息 kubectl get cs 查看master节点的状态 kubectl get pod 查看默认命名空间内的pod的信息 kubectl get ns 查看当前集群所有的命…...
7天玩转 Golang 标准库之 http/net
在构建web应用时,我们经常需要处理HTTP请求、做网页抓取或者搭建web服务器等任务,而Go语言在这方面为我们提供了强大的内置工具:net/http标准库,它为我们操作和处理HTTP协议提供了便利。 基础用法 一:处理HTTP请求 首…...
钡铼技术集IO数据采集可编程逻辑控制PLC无线4G环保物联网关
背景 数据采集传输对于环保企业进行分析和决策是十分重要的,而实时数据采集更能提升环保生产的执行力度,从而采取到更加及时高效的措施。因此实时数据采集RTU成为环保企业的必备产品之一。 产品介绍 在推进环保行业物联网升级过程中,环保RTU在…...
STM32CubeMX教程10 RTC 实时时钟 - 周期唤醒、闹钟A/B事件和备份寄存器
目录 1、准备材料 2、实验目标 3、实验流程 3.0、前提知识 3.1、CubeMX相关配置 3.1.1 、时钟树配置 3.1.2、外设参数配置 3.1.3 、外设中断配置 3.2、生成代码 3.2.1、外设初始化函数调用流程 3.2.2、外设中断函数调用流程 3.2.3、添加其他必要代码 4、常用函数 …...
HarmonyOS4.0系统性深入开发08服务卡片架构
服务卡片概述 服务卡片(以下简称“卡片”)是一种界面展示形式,可以将应用的重要信息或操作前置到卡片,以达到服务直达、减少体验层级的目的。卡片常用于嵌入到其他应用(当前卡片使用方只支持系统应用,如桌…...
002文章解读与程序——中国电机工程学报EI\CSCD\北大核心《计及源荷不确定性的综合能源生产单元运行调度与容量配置两阶段随机优化》已提供下载资源
👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆👆下载资源链接Ǵ…...
Typora快捷键设置详细教程
文章目录 一、快捷键设置步骤二、设置快捷键简单案例参考资料 一、快捷键设置步骤 在typora软件中,快捷键的设置步骤主要为: 打开【文件】–>【偏好设置】,找到【通用】–>【打开高级设置】,找到 conf.user.json 文件。 然…...
《异常检测——从经典算法到深度学习》25 基于深度隔离林的异常检测算法
《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …...
第7章 1 异常处理
bug的由来及分类 p81 字符串形式表示的数字之间也可以比较大小 import re ageinput(年龄:) if age>18:print(age)列表的append操作每次只能添加一个元素: lst[] lst.append(A) lst.append(B) # lst.append(A,B) 错误python中的异常处理机制 p82 t…...
昇腾910平台安装驱动、固件、CANN toolkit、pytorch
本文使用的昇腾910平台操作系统是openEuler,之前没了解过,不过暂时感觉用起来和centOS差不多。系统架构是ARM,安装包基本都是带aarch64字样,注意和x86_64区别开,别下错了。 安装依赖 cmake 通过yum安装的cmake版本较…...
【数据挖掘】模型融合
模型融合是指将多个不同的机器学习模型组合起来,通过综合多个模型的预测结果来得到更准确的预测结果。模型融合可以提高模型的鲁棒性,减小模型的方差,提高模型的泛化能力。 常见的模型融合方法包括平均法、投票法和堆叠法。 平均法(Averagin…...
DM、Oracle、GaussDB、Kingbase8(人大金仓数据库)和HIVE给列增加注释
DM数据库给列增加注释 1、创建表 CREATE TABLE test222 ( id int NOT NULL PRIMARY KEY, name varchar(1000) DEFAULT NULL, email varchar(1000) DEFAULT NULL, phone varchar(1000) DEFAULT NULL ) 2、给列添加注释 comment on column TEST222.NAME is 这是一个列注释; 例如…...
C语言实例_stdlib.h库函数功能及其用法详解
一、前言 C语言作为一种高效、灵活的编程语言,标准库的使用对于开发人员来说是不可或缺的。其中,stdlib.h是C语言中一个重要的标准库头文件,提供了许多常用的函数和工具,以便开发人员能够更加便捷地进行内存管理、字符串处理、随…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
rnn判断string中第一次出现a的下标
# coding:utf8 import torch import torch.nn as nn import numpy as np import random import json""" 基于pytorch的网络编写 实现一个RNN网络完成多分类任务 判断字符 a 第一次出现在字符串中的位置 """class TorchModel(nn.Module):def __in…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
向量几何的二元性:叉乘模长与内积投影的深层联系
在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...
字符串哈希+KMP
P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...
