輝夜的二叉樹
【題目背景】
又是某高中學生會無聊的一天。可愛的輝夜在繁忙的學習之餘,仍抽空欣賞她 n 個節點的二叉樹。
【問題描述】
突然,由於某種神秘力量,她的二叉樹每個節點都帶上了乙個權值。她看到這個神奇的二叉樹,想到了一條水題。由於真的太水了,她又魔改了一下。她看著你好奇的目光,偷偷告訴了你題目。
給出一棵 n 個節點,節點有權值的二叉樹,第 i 個點的點權為 a[i]。有 3 種操作(修改或查詢)
1. 修改點 x 的點權。
2. 對於點 x 的子樹,交換每個節點的左右兒子。
3. 選擇乙個點 x ,從根開始往下走,假設當前走到點 y ,若 a[x]<= a[y],則向 y 的左兒子走,否則向 y 的右兒子走,問能否走到節點 x 。
然而輝夜大小姐想起了 自己的題被 暴力踩標程 的恐懼,給了非常友善的暴力分。
【輸入格式】
第一行 2 個整數 n ,m ,表示二叉樹的節點個數與運算元。
接下來 n行
第 i 行 3 個整數。a[i],lc ,rc ,分別表示點 i 的初始權值,左兒子的編號,右兒子的編號。
接下來 m行
每行第乙個數 ops ,表示操作型別,如上所述。
若 ops=1 ,接下來兩個整數 x 權值改為 y。
若 ops=2 ,接下來乙個整數 x ,表示把點 x 的子樹每個點的左右兒子交換
若 ops=3 ,接下來乙個整數 x ,如上所述。
【輸出格式】
對於每個 ops=3 的操作,輸出 yes 或 no 。
【樣例輸入】
3 710 2 3
5 0 0
5 0 0
3 13 2
3 31 3 100
3 32 1
3 3【樣例輸出】
yesyes
noyes
no【資料範圍】
對於 10% 資料,n,m <=5000
另有 35% 資料,沒有操作 2 。
對於 100% 資料,n,m <=100000
題解:暴力65分wdm!666(正解樹鏈剖分)先獻上暴力程式。
#include#include#include
#include
#include
#include
#include
using
namespace
std;
const
int n=100002
;int
x,y,n,m,vc,s;
inta[n],l[n],r[n],c[n];
bool
op,fy[n];
bool dfs(int
u)
else }
void swap(int
u)int
main()
for(int i=1;i<=n;i++)
if(fy[i]==0)
for(int i=1;i<=m;i++)
if(vc==2
)
if(vc==3
)
//cout<}
return0;
}
二叉樹 二叉樹
題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...
樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹
目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...
二叉樹 48 二叉樹 二叉樹的高度
目的 使用c 模板設計並逐步完善二叉樹的抽象資料型別 adt 內容 1 請參照鍊錶的adt模板,設計二叉樹並逐步完善的抽象資料型別。由於該環境目前僅支援單檔案的編譯,故將所有內容都集中在乙個原始檔內。在實際的設計中,推薦將抽象類及對應的派生類分別放在單獨的標頭檔案中。參考教材 課件,以及網盤中的鍊錶...