2024年4月13日美团春招实习试题【第三题:红黑树】-题目+题解+在线评测【DFS】

2024年4月13日美团春招实习试题【第三题:红黑树】-题目+题解+在线评测【DFS】

  • 题目描述:
    • 输入描述
    • 输出描述
    • 样例
  • 解题思路一:
  • 解题思路二:c++
  • 解题思路三:0

题目描述:

塔子哥有一棵有n个节点的树,根节点为1号节点,树的每个节点是红色或者黑色,她想知道有多少节点的子树中同时包含红点和黑点。

输入描述

第一行输入一个整数n(1≤n≤105)表示节点数量 第二行输入一个长度为n的字符串s表示节点的颜色,第i个节点的颜色为 s i s_i si,若 s i s_i si为’B’表示节点的颜色为黑色,若 s i s_i si为’R’ 则表示节点的颜色为红色。 接下来n -1行,每行输入两个整数 u,v(1≤u,≤n)表示树上的边.

输出描述

输出一个整数表示答案。

样例

输入

3
BRB
1 2
2 3

输出

2

OJ链接:
https://codefun2000.com/p/P1821

解题思路一:

本题其实就是统计子树中有多少个节点既有红色节点,又有黑色节点。我们可以自顶向下来进行DFS

遍历到节点u时,首先根据节点u是红/黑,来对变量进行初始化

然后我们可以遍历u的所有子节点,去将以u为根节点的红/黑节点数量进行累加计算。

最后判断以u为子树的根节点的红色和黑色节点数量是否都大于0,若大于0,则答案+1

n = int(input())
s = input()
s = ' ' + s
N = 100005
g = [[] for _ in range(N)]
ans = 0
for i in range(n-1):
    a, b = map(int, input().split())
    g[a].append(b)
def dfs(u, fa):
    black, red = 0, 0
    if s[u] == 'B':
        black += 1
    else:
        red += 1
    for x in g[u]:
        if x == fa:
            continue
        (b, r) = dfs(x, u)
        black += b
        red += r
    if black > 0 and red > 0:
        ans += 1
    return (black, red)
dfs(1, 0)
print(ans)

时间复杂度:O(n2)
空间复杂度:O(n)递归

解题思路二:c++

#include<bits/stdc++.h>
using namespace std;
const int N=1E5+10;
typedef long long ll;
int n,res;
string s;
vector<int>g[N];
vector<int> dfs(int u,int fa){
    vector<int>color(2,0);
    if(s[u]=='B')color[0]++;
    else color[1]++;
    for(int &x:g[u]){  //遍历子树
        if(x==fa)continue;
        auto v=dfs(x,u);
        color[0]+=v[0];
        color[1]+=v[1];
    }
    if(color[0]>0&&color[1]>0)res++;
    return color;
}
int main(){
    cin>>n;
    cin>>s;
    s=" "+s;
    for(int i=1;i<n;i++){
        int a,b;
        cin>>a>>b;
        g[a].push_back(b);
        g[b].push_back(a);
    }
    dfs(1,0);
    cout<<res<<endl;
    return 0;
}

时间复杂度:O(n2)
空间复杂度:O(n)递归

解题思路三:0


时间复杂度:O(n)
空间复杂度:O(n)

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

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

相关文章

LeetCode 1.两数之和(HashMap.containsKey()、.get、.put操作)

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…

U盘惊现USBC乱码文件?别担心,这里有救星!

在数字化时代&#xff0c;U盘作为便捷的数据存储工具&#xff0c;在我们的日常生活和工作中扮演着至关重要的角色。然而&#xff0c;有时我们可能会遭遇一个令人头疼的问题——U盘突然出现了USBC乱码文件。这些乱码文件不仅使得U盘中的数据无法正常读取&#xff0c;还可能意味着…

【氮化镓】GaN HEMTs结温和热阻测试方法

文章《Temperature rise detection in GaN high-electron-mobility transistors via gate-drain Schottky junction forward-conduction voltages》&#xff0c;由Xiujuan Huang, Chunsheng Guo, Qian Wen, Shiwei Feng, 和 Yamin Zhang撰写&#xff0c;发表在《Microelectroni…

鸿蒙Next和鸿蒙4.0开发者如何选择

目录 一、 开头一句话重点落在鸿蒙原生开发&#xff0c;也就是ArkUI、Ability、ArkTS、ArkWeb、ArkData等。不管将来是鸿蒙Next2.0或者鸿蒙6.0都游刃有余。 二、 鸿蒙4.0与鸿蒙Next的共性共性概述详细分析总结 三、HarmonyOS Next与HarmonyOS 4的主要区别内核与兼容性设备与应用…

Spring AOP的实现方式与原理

目录 认识IOC与AOP AOP的实现方式 Aspect注解实现AOP 自定义注解实现AOP Spring AOP原理 代理模式 静态代理和动态代理 JDK动态代理 CGLIB动态代理 Spring AOP实现的哪种代理 认识IOC与AOP IOC又称为控制反转,也就是控制权发生了反转.在传统的程序中,我们是需要自己…

结构体内存对齐

结构体内存对齐的规则 第一个成员在结构体对象的首地址处。其他成员变量要对齐到对齐数的整数倍。结构体对象的总大小是最大对齐数的整数倍。如果结构体内嵌套了结构体&#xff0c;嵌套的结构体对齐到自己的最大对齐数的整数倍处。结构体整个大小就是最大对齐数的整数倍。 对…

JS高级 - Promise使用方法详解

目录 一、什么是Promise 1.1 Promise的三种状态 二、Promise 基本用法 2.1 Promise基本使用 2.2 Promise使用时传参 2.3 Promise 链式调用 2.4 链式调用注意事项 三、Promise内置方法 3.1 Promise.all() 3.2 Promise.race() 3.3 Promise.allSettled() 3.4 Promise.…

1688商家自曝流量暴涨技巧!7天起店,仅需4步神操作!

经常有人问我1688&#xff0c;7天怎么起店&#xff1f;根据之前的一些经验分享一下&#xff0c;大概7天就能做到4位数以下的展现量&#xff0c;4步轻松完成。 新运营课堂第一步&#xff0c;进入卖家工作台&#xff0c;点击商品&#xff0c;查看单品被收藏次数及被加购次数&…

C++--浅拷贝和深拷贝

浅拷贝和深拷贝 1.浅拷贝 浅拷贝,多个指针指向同一段内存,出现一处指针修改数据,其它指针的数据也发生改变。 1.1 面向过程的浅拷贝(C方式) 如下代码: //下面程序,从键盘获取4个字符串,然后输出到屏幕 int main() {char buf[100];char* strArr[4];//长度为4的字符指针数组…

Unity面向切面编程

一直说面向AOP&#xff08;切面&#xff09;编程&#xff0c;好久直接专门扒出理论、代码学习过。最近因为某些原因&#x1f62d;还得再学学造火箭的技术。 废话不多说&#xff0c;啥是AOP呢&#xff1f;这里我就不班门弄斧了&#xff0c;网上资料一大堆&#xff0c;解释的肯定…

广东海洋大学成功部署(泰迪智能科技)大数据人工智能实验室建设

广东海洋大学简称广东海大&#xff0c;坐落于广东省湛江市&#xff0c;是国家海洋局与广东省人民政府共建的省属重点建设大学、广东省高水平大学重点学科建设高校、粤港澳高校联盟成员 &#xff0c;入选卓越农林人才教育培养计划&#xff0c;是教育部本科教学水平评估优秀院校。…

【SQL】数据库SQL语句

1、主键 主键值唯一&#xff0c;不可修改&#xff0c;不能为空&#xff0c;删除不能重用 2、数据类型&#xff08;常用&#xff09; char int float date timestamp 3、select select * from data; select xx,xxx from data;//取部分行 select * from data limit 100; //限…

msyql中的四大日志

日志 错误日志二进制日志作用日志格式日志查看日志删除 查询日志慢查询日志 错误日志 错误日志是MySQL中最重要的日志之一&#xff0c;它记录了当MySQL启动和停止时&#xff0c;以及服务器子啊运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时…

angular node版本问题导致运行出错时应该怎么处理

如下图所示&#xff1a; 处理方式如下&#xff1a; package.json中start跟build中添加&#xff1a;SET NODE_OPTIONS--openssl-legacy-provider即可

SSRF+Redis未授权getshell

SSRFRedis未授权getshell 1.前言 当一个网站具有ssrf漏洞&#xff0c;如果没有一些过滤措施&#xff0c;比如没过滤file协议&#xff0c;gophere协议&#xff0c;dict等协议&#xff0c;就会导致无法访问的内网服务器信息泄露&#xff0c;甚至可以让攻击者拿下内网服务器权限 …

pixhawk控制板的ArduPilot固件编译

0. 环境 - ubuntu18&#xff08;依赖python2和pip&#xff0c;建议直接ubuntu18不用最新的&#xff09; - pixhawk 2.4.8 - pixhawk 4 1. 获取源码 # 安装git sudo apt install git # 获取源码 cd ~/work git clone --recurse-submodules https://github.com/ArduPilot/a…

腾讯AI Lab:“自我对抗”提升大模型的推理能力

本文介绍了一种名为“对抗性禁忌”&#xff08;Adversarial Taboo&#xff09;的双人对抗语言游戏&#xff0c;用于通过自我对弈提升大型语言模型的推理能力。 &#x1f449; 具体的流程 1️⃣ 游戏设计&#xff1a;在这个游戏中&#xff0c;有两个角色&#xff1a;攻击者和防守…

VsCode调试远程服务器上面的Docker容器

第一步 VsCode 连接ssh 下载安装VsCode(Visual Studio Code)&#xff0c;首次安装会提示你安装Chinese(Simplified)中文简体&#xff0c;安装完后重新打开就是汉化界面了。在左边侧边栏找到扩展选项&#xff0c;然后安装Remote Development插件&#xff0c;里面包含了Remote S…

糖尿病可能是一团虚火,肝肾同源,肝阴不足。

其实对于很多的糖尿病患者来说&#xff0c;他的问题本质可能是一团虚火&#xff0c;就拿前段时间我的门诊一个患者为例&#xff0c;之前患有高血压&#xff0c;总是眩晕烦躁&#xff0c;常常失眠&#xff0c;大概近四个月出现多饮、多尿怎么喝水也不解渴&#xff0c;经过检查确…

每日一题---OJ题: 链表的回文结构

片头 嗨! 小伙伴们,大家好! 今天我们来一起学习这道OJ题--- 链表的回文结构 嗯...这道题好像不是很难,我们来分析分析 举个例子: 我们可以看到,上图中的两个链表都是回文结构: 即链表的回文结构是指一个链表中的结点值从前往后读和从后往前读都是一样的结构。也就是说&#xf…
最新文章