堆中的路徑 Heap

2021-08-17 12:39:00 字數 1599 閱讀 4885

7-2 堆中的路徑(25 分)

將一系列給定數字插入乙個初始為空的小頂堆h。隨後對任意給定的下標i,列印從h[i]到根結點的路徑。

輸入格式:

每組測試第1行包含2個正整數n和m(≤1000),分別是插入元素的個數、以及需要列印的路徑條數。下一行給出區間[-10000, 10000]內的n個要被插入乙個初始為空的小頂堆的整數。最後一行給出m個下標。

輸出格式:

對輸入中給出的每個下標i,在一行中輸出從h[i]到根結點的路徑上的資料。數字間以1個空格分隔,行末不得有多餘空格。

輸入樣例:

5 3

46 23 26 24 10

5 4 3

輸出樣例:

24 23 10

46 23 10

26 10

思路

可以用stl 裡面的 push_heap 來插入

然後 每次 下標/2 往上找就可以了

ac**

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define clr(a) memset(a, 0, sizeof(a))

using

namespace

std;

typedef

long

long ll;

typedef

long

double ld;

typedef

unsigned

long

long ull;

typedef pair pii;

typedef pair pll;

typedef pair psi;

typedef pair pss;

const

double pi = 3.14159265358979323846264338327;

const

double e = exp(1);

const

double eps = 1e-6;

const

int inf = 0x3f3f3f3f;

const

int maxn = 1e4 + 5;

const

int mod = 1e9 + 7;

vector

v;void dfs(int x)

else

}int main()

for (int i = 0; i < m; i++)

}

堆中的路徑 Heap

7 2 堆中的路徑 25 分 將一系列給定數字插入乙個初始為空的小頂堆h。隨後對任意給定的下標i,列印從h i 到根結點的路徑。輸入格式 每組測試第1行包含2個正整數n和m 1000 分別是插入元素的個數 以及需要列印的路徑條數。下一行給出區間 10000,10000 內的n個要被插入乙個初始為空的...

堆(Heap)的實現

這次實現了堆,這個堆不是指系統堆疊的堆,是一種資料結構,見下圖 堆的本質就是乙個陣列 上圖中,紅色的是值,黑色的是下標 簡單的來說就是把乙個陣列看成是二叉樹,就像上圖 大堆和小堆分別是指根節點比孩子節點的值大或者是小,看了上圖之後就可以發現,父親節點和孩子節點之間下表的關係,parnet child...

堆 Heap 的實現

什麼是堆?優先佇列 opriority queue 特殊的 佇列 取出元素的順序是依照元素的優先權 關鍵字 大小,而不是元素進入佇列的先後順序。堆有兩大特性 1,結構性 是一顆完全二叉樹。2,有序性 每個葉子結點到根結點都是有序的,如果是公升序,那麼就是最大堆,否則為最小堆。這些是堆 下面的不是堆 ...