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;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/41337.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/41337.shtml
英文地址,請注明出處:http://en.pswp.cn/web/41337.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LVGL移植與VS模擬器使用

一、移植文件介紹 二、移植部分 第一步&#xff1a;創建LVGL文件夾 第二步&#xff1a; 構造LVGL文件夾&#xff1a;LVGL - GUI - lvgl - 第三步&#xff1a;添加文件 3.1 從examples中添加2個.c文件 3.2 從src中添加文件 draw文件 extra文件 第四步&#xff1a; 三、Ke…

Linux系統安裝軟件包的方法rpm和yum詳解

起因&#xff1a; 本篇文章是記錄學習Centos7的歷程 關于rpm 常見命令 1&#xff09;查看已經安裝的軟件包 rpm -q 軟件包名 2&#xff09;查看文件的相關信息 rpm -qi 軟件包名 3&#xff09;查看軟件包的依賴關系 就是說要想安裝這個軟件包&#xff0c;就必須把一些前…

三級_網絡技術_04_中小型網絡系統總體規劃與設計

1.下列關于路由器技術特征的描述中&#xff0c;正確的是()。 吞吐量是指路由器的路由表容量 背板能力決定了路由器的吞吐量 語音、視頻業務對延時抖動要求較低 突發處理能力是以最小幀間隔值來衡量的 2.下列關于路由器技術特征的描述中&#xff0c;正確的是()。 路由器的…

springboot公寓租賃系統-計算機畢業設計源碼03822

摘要 1 緒論 1.1 研究背景與意義 1.2選題背景 1.3論文結構與章節安排 2 公寓租賃系統系統分析 2.1 可行性分析 2.1.1 技術可行性分析 2.1.2 經濟可行性分析 2.1.3 法律可行性分析 2.2 系統功能分析 2.2.1 功能性分析 2.2.2 非功能性分析 2.3 系統用例分析 2.4 系…

韋東山嵌入式linux系列-第一個實驗

1 前言 筆者使用的是韋東山STM32MP157 Pro的板子&#xff0c;環境搭建部分按照說明文檔配置完成。配置橋接網卡實現板子、windows、ubuntu的通信&#xff0c;也在開發板掛載 Ubuntu 的NFS目錄 &#xff0c;這里就不再贅述了。 板子: 192.168.5.9 windows: 192.168.5.10 ubunt…

【linux】服務器創建RAID1

【linux】服務器創建RAID1 文章目錄 【linux】服務器創建RAID1一、配置介紹raid介紹raid類型RAID 0:RAID 1:RAID 5:RAID 6:二、配置RAID硬件RAID:軟件RAID:三、軟件配置RAID1(以linux為例)1.先進入管理員模式2.安裝mdadm工具3.創建raid1數組4.查看RAID數組狀態5.格式化和掛載…

機械鍵盤如何挑選

機械鍵盤的選擇是一個關鍵的決策&#xff0c;因為它直接影響到我們每天的打字體驗。在選擇機械鍵盤時&#xff0c;有幾個關鍵因素需要考慮。首先是鍵盤的鍵軸類型。常見的鍵軸類型包括藍軸、紅軸、茶軸和黑軸等。不同的鍵軸類型具有不同的觸發力、觸發點和聲音。藍軸通常具有明…

神經網絡和安全結合:一種基于神經網絡的智能攻擊檢測與防御系統;構建攻擊行為預測模型

目錄 神經網絡和安全結合 摘要 引言 理論基礎 技術實現與創新點 實驗驗證 結論與展望 一種基于神經網絡的智能攻擊檢測與防御系統 一、系統概述 二、主要功能 三、技術特點 四、應用前景 構建攻擊行為預測模型 一、構建攻擊行為預測模型的步驟 1. 數據收集 2. …

單鏈表的學習與基礎運用p

當我們在實際做項目&#xff0c;或者是自主開發一點小東西的時候&#xff0c;往往會儲存一些數據&#xff0c;有時候我們需要添加這些數據&#xff0c;有時候需要刪除&#xff0c;而有時候&#xff0c;僅僅只需要查找到就行。鏈表中的每一個節點都是一個獨立開辟的空間&#xf…

聚類分析方法(一)

目錄 一、聚類分析原理&#xff08;一&#xff09;聚類分析概述&#xff08;二&#xff09;聚類的數學定義&#xff08;三&#xff09;簇的常見類型&#xff08;四&#xff09;聚類框架及性能要求&#xff08;五&#xff09;簇的距離 二、劃分聚類算法&#xff08;一&#xff0…

Java 有什么必看的書?

Java必看經典書有這兩本&#xff1a; 1、Java核心技術速學版&#xff08;第3版&#xff09; 經典Java開發基礎書CoreJava速學版本&#xff01;Java入門優選書籍&#xff0c;更新至Java17&#xff0c;內容皆是精華&#xff0c;讓Java學習更簡單&#xff0c;讓Java知識應用更快速…

【Linux】什么是進程間通信?方式有哪些?本質理解?

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;個人主頁 &#xff1a;阿然成長日記 …

使用 ChronicleMap 擴展高性能內存緩存

1.擴展內存緩存的挑戰 我們用于與各種程序化和需求方平臺 (DSP) 集成的應用程序之一是低延遲、高吞吐量的基于 JVM 的應用程序。這是 付款憑單&#xff08;DV&#xff09;付前前驗證解決方案的核心組件。自多年前成功推出此解決方案以來&#xff0c;我們不斷添加多項關鍵功能&…

【ChatGPT】全面解析 ChatGPT:從起源到未來

ChatGPT 是由 OpenAI 開發的一個基于 GPT&#xff08;Generative Pre-training Transformer&#xff09;架構的聊天機器人。通過自然語言處理&#xff08;NLP&#xff09;技術&#xff0c;ChatGPT 能夠理解和生成語言&#xff0c;與人類進行對話。本文將深入探討其起源、發展、…

SpringSecurity源碼分析-過濾器鏈是如何植入到spring中的

SpringSecurity源碼分析-過濾器鏈是如何植入到spring中的 一切的源頭都是因為在web.xml中配置了這樣一個Filter <!--security--><filter><filter-name>springSecurityFilterChain</filter-name><filter-class>org.springframework.web.filter.…

NoSQL 之 Redis 集群部署

前言&#xff1a; &#xff08;1&#xff09;主從復制&#xff1a;主從復制是高可用Redis的基礎&#xff0c;哨兵和集群都是在主從復制基礎上實現高可用 的。主從復制主要實現了數據的多機備份&#xff0c;以及對于讀操作的負載均衡和簡單的故障恢復。缺陷&#xff1a; 故障…

vue3+antd 實現文件夾目錄右鍵菜單功能

原本的目錄結構&#xff1a; 右鍵菜單&#xff1a; 點擊菜單以后會觸發回調&#xff1a; 完整的前端代碼&#xff1a; <template><a-directory-treev-model:expandedKeys"expandedKeys"v-model:selectedKeys"selectedKeys"multipleshow-li…

在 Docker 容器中運行 Vite 開發環境,有這兩個問題要注意

容器化開發給我們帶來了很多便捷&#xff0c;但是在開發環境下也有一些問題要注意&#xff0c;如果不解決這些問題&#xff0c;你的開發體驗不會很好。 容器啟動正常&#xff0c;卻無法訪問 我們用 Docker 啟動一個 Vite Vue3 項目的開發環境后&#xff0c;發現端口日志一切…

計算機如何存儲浮點數

浮點數組成 在計算機中浮點數通常由三部分組成&#xff1a;符號位、指數位、尾數位。IEEE-754中32位浮點數如下&#xff1a; 上圖32bit浮點數包含1bit的符號位&#xff0c;8比特的指數位和23bit的尾數位。對于一個常規浮點數&#xff0c;我們來看看它是如何存儲和計算的。這里…

conda env pip install error:No space left on device

conda 環境 pip install error&#xff1a;No space left on device 文章目錄 conda 環境 pip install error&#xff1a;No space left on device現象1 實驗2 分析和解決辦法 現象 非root用戶的服務器&#xff0c;需要安裝環境&#xff0c;安裝的環境超過2GB sudo pip insta…