当前位置: 首页 > news >正文

RGB树-美团2023笔试(codefun2000)

题目链接
RGB树-美团2023笔试(codefun2000)

题目内容

塔子哥是一位著名的冒险家,他经常在各种森林里探险。今天,他来到了道成林,这是一片美丽而神秘的森林。在探险途中,他遇到了一棵 n 个节点的树,树上每个节点都被涂上了红、绿、蓝三种颜色之一。塔子哥发现,如果这棵树同时存在一个红色节点、一个绿色节点和一个蓝色节点,那么我们就称这棵树是多彩的。很幸运,他发现这棵树最初就是多彩的。但是,在探险的过程中,塔子哥发现这棵树上有一条边非常重要,如果砍掉这条边,就可以把这棵树分成两个部分。他想知道,有多少种砍法可以砍掉这条边,使得砍完之后形成的两棵树都是多彩的。

输入描述

第一行个整数 n ,表示节点个数
第二行n−1 个整数 𝑝2,𝑝3,…,𝑝𝑛,pi表示树上 i 和 𝑝 两点之间有一条边。保证给出的定是一棵树。
第三行一个长度为 n 的字符串,第 i 个字符表示第 i 个节点的初始颜色。其中 R 表示红色, G 表示绿色, B 表示蓝色。
保证字符串只由这三种大写字母构成对于全部数据, 3 ≤ n ≤ 1 0 5 3≤n≤10^5 3n105

输出描述

输出一行,一个正整数,表示答案。

样例1

输入

7
1 2 3 1 5 5
GBGRRBB

输出

1

题解1

#include<bits/stdc++.h>
using namespace std;const int N = 1e5 + 10;int n, ans;
struct Node{int Rcnt,Gcnt,Bcnt;
}node[N];
char s[N];
vector<int> edge[N];void dfs1(int u){ // 统计以u为根节点的颜色为RGB的节点个数int sz = edge[u].size();if(sz == 0) return ;for(int i = 0; i < sz; i++){int v = edge[u][i];dfs1(v);node[u].Rcnt += node[v].Rcnt;node[u].Gcnt += node[v].Gcnt;node[u].Bcnt += node[v].Bcnt;}
}
void dfs2(int u){int sz = edge[u].size();for(int i = 0; i < sz; i++){ // 遍历每条边,以每条边为边界,分成两部分,判断两部分的RGB颜色节点个数是否>=1 int v = edge[u][i];int rcnt = node[v].Rcnt;int gcnt = node[v].Gcnt;int bcnt = node[v].Bcnt;int Rcnt = node[1].Rcnt - rcnt;int Gcnt = node[1].Gcnt - gcnt;int Bcnt = node[1].Bcnt - bcnt;if(rcnt >= 1 && gcnt >= 1 && bcnt >= 1 && Rcnt >= 1 && Gcnt >= 1 && Bcnt >= 1) {ans++;dfs2(v);}}
} 
int main(){scanf("%d", &n);for(int i = 2, u; i <= n; i++){scanf("%d", &u);edge[u].push_back(i);}scanf("%s", s + 1);for(int i = 1; s[i] != '\0'; i++){if(s[i] == 'G') node[i].Gcnt++;else if(s[i] == 'R') node[i].Rcnt++;else if(s[i] == 'B') node[i].Bcnt++;}dfs1(1);dfs2(1);printf("%d\n", ans); return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SSM高校教师教学质量评估系统-计算机毕业设计源码03344
  • SpringBoot+OSS实现文件上传
  • 基于深度学习LightWeight的人体姿态检测跌倒系统源码
  • Redis数据结构解析-RedisObject
  • vb.netcad二开自学笔记5:ActiveX链接CAD的.net写法
  • 【JVM系列】Full GC(完全垃圾回收)的原因及分析
  • 【手写数据库内核组件】01 解析树的结构,不同类型的数据结构组多层的链表树,抽象类型统一引用格式
  • 深入分析SSL/TLS服务器的证书(C/C++代码实现)
  • 单片机与FPGA的关系及其在嵌入式系统中的应用
  • 技术周总结 2024.07.01~07.07(Spark Scala)
  • Rust入门实战 编写Minecraft启动器#3解析资源配置
  • 冯诺依曼体系结构与操作系统(Linux)
  • (1)Jupyter Notebook 下载及安装
  • OpenCV教程02:图像处理系统1.0(翻转+形态学+滤波+缩放+旋转)
  • 华为机试HJ37统计每个月兔子的总数
  • Android 控件背景颜色处理
  • Apache Spark Streaming 使用实例
  • CentOS 7 修改主机名
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • echarts花样作死的坑
  • HTTP中的ETag在移动客户端的应用
  • Invalidate和postInvalidate的区别
  • iOS 颜色设置看我就够了
  • mysql 数据库四种事务隔离级别
  • spring + angular 实现导出excel
  • text-decoration与color属性
  • Vue 2.3、2.4 知识点小结
  • Vue 动态创建 component
  • 回流、重绘及其优化
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端性能优化--懒加载和预加载
  • 如何利用MongoDB打造TOP榜小程序
  • 手写一个CommonJS打包工具(一)
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 我从编程教室毕业
  • 一道面试题引发的“血案”
  • 一起参Ember.js讨论、问答社区。
  • - 转 Ext2.0 form使用实例
  • 第二十章:异步和文件I/O.(二十三)
  • ​低代码平台的核心价值与优势
  • ‌移动管家手机智能控制汽车系统
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • #职场发展#其他
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (void) (_x == _y)的作用
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (算法)大数的进制转换
  • (转)负载均衡,回话保持,cookie
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Core实战项目之CMS 第一章 入门篇-开篇及总体规划