簡單的樹(summary)

2022-05-04 10:36:06 字數 1084 閱讀 6142

實驗任務

可憐的 bibi 丟了好幾臺手機以後,看誰都像是小偷,他已經在小本本上記下了他認為的各個地點的小偷數量。 現在我們將bibi的家附近的地形抽象成一棵有根樹。每個地點都是樹上的 乙個節點,節點上都標註了 bibi 心中該地點的小偷數量。現在 bibi 告訴你乙個 節點 k,請你求出以該節點為根的子樹中小偷數量的總和,以及子樹中小偷最多 的節點的小偷數量。

★資料輸入

輸入第一行為乙個正整數 n(1≤n≤100000)表示樹的節點數目,樹根的編號 總是為 1,且沒有小偷。 接下來 n-1 行,每行兩個正整數 p,x(1≤x≤100)。代表編號為 i 的節點的父 親節點 p 和該節點的小偷數量 x。資料保證輸入的 p 小於當前的 i。這裡的 i 從 2 依次數到 n。 第 n+1 行乙個整數 m(1≤m≤n), 表示詢問組數。 第 n+2 行有 m 個整數,每個整數 ki(1≤ki≤n)代表該組詢問中的節點 k。

★資料輸出

輸出 m 行,每行兩個整數,代表以詢問節點為根的子樹中小偷數量的總和, 以及子樹中小偷最多的節點的小偷數量。

測試樣例:

輸入:3

1 56

1 8211

輸出:138 82

解題過程:最開始對這題的思路陷入了死胡同,只考慮到通過記錄兒子節點然後查詢兒子實現,這樣實現起來很多侷限性,而且效率可能不高,我還因為對鍊錶的使用不熟沒能實現。之後同學交流得知新思路。

思路:通過陣列巢狀儲存父節點就行了,看完之後甚至會覺得不是在做樹的問題。

#include#include#includeusing namespace std;

int b[100000];

struct node

a[100000];

int main()

for (i = n; i > 1; i--)

int m;

cin >> m;

for (i = 1; i <= m; i++)

for (i = 1; i <= m; i++)

return 0;

}

很多可能會因為看到是樹的問題就被束縛起來不會往這個方向想,我就是這樣,但願以後可以發散思維。

SAS中的summary過程簡介

summary過程主要用來對數值變數計算單個變數的基本統計量,使用語句與means過程類似。預設時summary過程不列印輸出計算結果。必須指定print選項才能輸出計算結果。語法格式 proc summary 選統計關鍵 var 變數名1變數名2 by 變數名1變數名2 class 變數名1變數名...

樹的簡單遍歷

include include malloc.h using namespace std typedef struct bitnodebitnode,bitree bitree create bitree t return t void preorder bitree t 先序遍歷 void ino...

樹的簡單問題

給定一顆樹,輸出樹的根root,孩子最多的結點max以及他的孩子。第一行 n 結點個數 100 m 邊樹 100 以下m行 每行倆個結點x和y,表示y是x的孩子 x,y 1000 第一行 樹根root。第二行 孩子最多的結點max。第三行 max的孩子。8 74 1 4 21 3 1 52 6 2 ...