《P4092 [HEOI2016/TJOI2016] 樹》

題目描述

在 2016 年,佳媛姐姐剛剛學習了樹,非常開心。現在他想解決這樣一個問題:給定一顆有根樹,根為?1?,有以下兩種操作:

  1. 標記操作:對某個結點打上標記。(在最開始,只有結點?1?有標記,其他結點均無標記,而且對于某個結點,可以打多次標記。)

  2. 詢問操作:詢問某個結點最近的一個打了標記的祖先。(這個結點本身也算自己的祖先)

你能幫幫她嗎?

輸入格式

第一行兩個正整數?N?和?Q?分別表示節點個數和操作次數。

接下來?N?1?行,每行兩個正整數?u,v(1?u,v?n)?表示?u?到?v?有一條有向邊。

接下來?Q?行,形如?oper num?,oper?為?C?時表示這是一個標記操作,?oper?為?Q?時表示這是一個詢問操作。

輸出格式

輸出一個正整數,表示結果

輸入輸出樣例

輸入 #1復制

5 5 
1 2 
1 3 
2 4 
2 5 
Q 2 
C 2 
Q 2 
Q 5 
Q 3

輸出 #1復制

1
2
2
1

說明/提示

30%?的數據,1?N,Q?1000?;

70%?的數據,1?N,Q?10000?;

100%?的數據,1?N,Q?100000?。

代碼實現:

#include<iostream>
#include<cstdio>
#define N 100001
using namespace std;
int nodeCount, queryCount, edgeCount, queueHead, queueTail;
int adjacencyList[N], parent[N], queue[N*5];
bool visited[N];
struct Edge
{
int nextEdge;
int targetNode;
} edges[N];
void addEdge(int source, int destination)
{
edges[++edgeCount].nextEdge=adjacencyList[source];
edges[edgeCount].targetNode=destination;
adjacencyList[source]=edgeCount;
}
void readInteger(int &value)
{
value=0;
char currentChar=getchar();
while(currentChar<'0'||currentChar>'9') currentChar=getchar();
while(currentChar>='0'&&currentChar<='9')
{
value=(value<<1)+(value<<3)+currentChar-'0';
currentChar=getchar();
}
}
void processNode(int node)
{
visited[node]=1;
parent[node]=node;
queueHead=0;
queueTail=0;
queue[++queueTail]=node;
while(queueHead<queueTail)
{
int currentNode=queue[++queueHead];
for(int i=adjacencyList[currentNode]; i; i=edges[i].nextEdge)
{
int childNode=edges[i].targetNode;
if(visited[childNode]) continue;
queue[++queueTail]=childNode;
parent[childNode]=node;
}
}
}
int main()
{
scanf("%d%d",&nodeCount,&queryCount);
for(int i=1; i<nodeCount; i++)
{
int node1, node2;
scanf("%d%d",&node1,&node2);
addEdge(node1,node2);
}
visited[1]=1;
for(int i=1; i<=nodeCount; i++) parent[i]=1;
for(int i=1; i<=queryCount; i++)
{
char operationType;
int nodeNumber;
cin>>operationType;
readInteger(nodeNumber);
if(operationType=='C'&&!visited[nodeNumber]) processNode(nodeNumber);
else if(operationType=='Q') printf("%d\n",parent[nodeNumber]);
}
return 0;
}

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

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

相關文章

TCP頭部

TCP頭部字段詳解1. 源端口和目的端口&#xff08;各16位&#xff09;功能&#xff1a;標識發送和接收應用程序范圍&#xff1a;0-65535&#xff08;0-1023為知名端口&#xff09;技術細節&#xff1a;客戶端通常使用臨時端口&#xff08;1024-65535&#xff09;服務端使用固定端…

LinkedList與鏈表(單向)(Java實現)

引入鏈表結構&#xff1a;在ArrayList任意位置插入或者刪除元素時&#xff0c;就需要將后序元素整體往前或者往后 搬移&#xff0c;時間復雜度為O(n)&#xff0c;效率比較低&#xff0c;因此ArrayList不適合做任意位置插入和刪除比較多的場景。因此&#xff1a;java集合中又引入…

網絡--VLAN技術

目錄 VLAN實驗報告 一、實驗拓撲 二、實驗要求 三、實驗思路 1、實驗準備 2. VLAN 3. DHCP 自動分配 4、 全網可達驗證 四、實驗步驟 &#xff08;一&#xff09;交換機配置- VLAN 創建與接口劃分 &#xff08;二&#xff09;路由器配置&#xff08;R1&#xff0c…

網絡基礎17--設備虛擬化

一、傳統MSTPVRRP的不足傳統MSTPVRRP設計&#xff1a;規劃復雜&#xff1a;需要詳細規劃VRRP多實例的Master歸屬、MSTP的VLAN和生成樹實例歸屬&#xff0c;以及IP網段。收斂速度慢&#xff1a;故障恢復速度一般在秒級&#xff0c;VRRP收斂時間至少需要3秒&#xff0c;故障恢復速…

深入解析Hadoop資源隔離機制:Cgroups、容器限制與OOM Killer防御策略

Hadoop資源隔離機制概述在分布式計算環境中&#xff0c;資源隔離是保障多任務并行執行穩定性的關鍵技術。Hadoop作為主流的大數據處理框架&#xff0c;其資源管理能力直接影響集群的吞吐量和任務成功率。隨著YARN架構的引入&#xff0c;Hadoop實現了計算資源與存儲資源的解耦&a…

static 關鍵字的 特殊性

static 關鍵字的 “特殊性” 主要體現在其與類、對象的綁定關系&#xff0c;以及由此帶來的一些反常規規則&#xff0c;具體如下&#xff1a;生命周期與內存位置特殊靜態成員&#xff08;變量 / 方法&#xff09;隨類加載而創建&#xff0c;隨類卸載而銷毀&#xff0c;生命周期…

win10系統Apache以 FastCGI方式運行PHP

文件下載及官方網站 VC運行庫Latest下載頁:Latest supported Visual C Redistributable downloads | Microsoft Learnapache httpd官網:Welcome! - The Apache HTTP Server Project下載頁:Apache VS17 binaries and modules downloadphp官網:PHP: Hypertext Preprocessor下載頁…

MCP與企業數據集成:ERP、CRM、數據倉庫的統一接入

MCP與企業數據集成&#xff1a;ERP、CRM、數據倉庫的統一接入 &#x1f31f; Hello&#xff0c;我是摘星&#xff01; &#x1f308; 在彩虹般絢爛的技術棧中&#xff0c;我是那個永不停歇的色彩收集者。 &#x1f98b; 每一個優化都是我培育的花朵&#xff0c;每一個特性都是我…

【milvus檢索】milvus檢索召回率

Milvus中兩種核心查詢方式&#xff1a;暴力搜索&#xff08;Brute-force Search&#xff09; 和 近似最近鄰搜索&#xff08;Approximate Nearest Neighbor, ANN&#xff09;。 逐一計算相似度&#xff1a;這是暴力搜索&#xff0c;能保證100%找到最相似的向量&#xff0c;但速…

docker Neo4j

Day 1 &#xff1a;Docker Desktop 基礎熟悉 運行官方 hello-world 測試&#xff1a; docker -run hello-world 運行 Nginx 體驗容器暴露端口&#xff1a; docker run -d -p 8080:80 nginx -d --detach 以 分離模式 運行容器 -p --publish 設置 宿主機與容器的端口映射。…

Win10_Qt6_C++_YOLO推理 -(1)MingW-opencv編譯

先上效果圖&#xff1a; 因為是一個為了嘗試跑通的demo&#xff0c;美觀、功能都先忽略哈。 一、環境 庫版本下載鏈接備注cmakecmake-4.1.0-rc2-windows-x86_64.msihttps://cmake.org/download/make x86_64-15.1.0-release-posix-seh-ucrt-rt_v12-rev0.7zhttps://github.com/…

day060-zabbix監控各種客戶端

文章目錄0. 老男孩思想-一個人的背書1. zabbix各種客戶端1.1 Windows Server監控1.2 網絡設備監控1.3 java應用監控1.4 前端監控java程序故障2. 相關項監控3. 思維導圖0. 老男孩思想-一個人的背書 學歷、能力、態度、特長、人品、口碑&#xff08;身邊的人、領導&#xff09; …

OpenCV 官翻 2 - 圖像處理

文章目錄色彩空間轉換目標色彩空間轉換目標追蹤如何確定要追蹤的HSV值&#xff1f;練習圖像的幾何變換目標變換縮放翻譯旋轉仿射變換透視變換其他資源圖像閾值處理目標簡單閾值化自適應閾值化大津二值化法Otsu二值化算法原理其他資源練習圖像平滑處理目標二維卷積&#xff08;圖…

動態路由協議基礎

一、動態路由協議簡介2.動態路由協議的基本功能二、動態路由協議分類對比項距離矢量&#xff08;如 RIP&#xff09;鏈路狀態&#xff08;如 OSPF&#xff09;信息來源只聽直接鄰居說收集全網鏈路狀態&#xff0c;自己建 “地圖”計算邏輯鄰居給的距離 1&#xff0c;簡單累加用…

netstat -tunlp | grep的作用

??一、命令整體結構解析??命令由兩部分通過管道符 |連接&#xff1a;netstat -tunlp&#xff1a;核心網絡狀態統計命令&#xff0c;輸出指定類型的網絡連接信息&#xff1b;grep&#xff1a;文本搜索工具&#xff0c;用于過濾 netstat的輸出結果&#xff0c;僅保留符合特定…

教育數字化革命:低代碼破局與未來展望

當下&#xff0c;教育領域正經歷前所未有的深刻變革——教育數字化轉型。這并非簡單的技術疊加&#xff0c;而是從教育理念到模式的全方位重塑&#xff0c;已成為推動教育高質量發展、助力我國邁向教育強國的核心驅動力。數字技術正以前所未有的速度和力度&#xff0c;全方位重…

云服務器磁盤IO性能優化的測試與配置方法

云服務器磁盤IO性能優化的測試與配置方法在云計算環境中&#xff0c;磁盤IO性能直接影響著應用程序的響應速度和系統整體穩定性。本文將深入解析云服務器磁盤IO性能優化的關鍵技術路徑&#xff0c;從測試方法論到配置調整方案&#xff0c;幫助運維人員突破存儲瓶頸。我們將重點…

Python Day22 - 復習日

浙大疏錦行 Pythonday22 本周學習內容主要是有關降維的一些內容以及基本的數組操作&#xff1a; 數組的常見操作以及shape聚類算法的選擇以及常用評估指標、聚類后的結果分析特征篩選方法&#xff1a;方差篩選、lasso等SVD進行降維常見的降維算法&#xff1a;LDA、PCA等

飛算JavaAI文字需求描述功能:高效驅動項目開發的智能解決方案

在數字化開發浪潮中&#xff0c;如何將模糊的需求快速轉化為具體的開發指令&#xff0c;是提升項目效率的關鍵環節。飛算JavaAI推出的文字需求描述功能&#xff0c;以自然語言交互為核心&#xff0c;為開發者和項目管理者提供了一套高效、精準的需求轉化與項目管理方案&#xf…

探索自然語言處理NLP的Python世界

文本預處理&#xff1a;數據清洗與標準化 在自然語言處理&#xff08;NLP&#xff09;的旅程中&#xff0c;文本預處理是至關重要的第一步。原始文本數據往往包含噪聲、不一致性以及各種格式問題&#xff0c;直接影響后續模型的性能。文本預處理旨在將文本轉化為統一、規范的格…