AcWing 1649. 堆路径
原题链接
中等
作者:
fei0825
,
2023-05-22 16:41:01
,
所有人可见
,
阅读 41
#include <iostream>
using namespace std;
const int N = 1010;
int h[N], n, tmp[N], idx;
void dfs(int u, bool& fmax, bool& fmin){
int l=u<<1, r=u<<1|1;
if( l>n && r>n ){ //叶子结点
for( int i=0; i<idx; i++ ){
printf("%d ", tmp[i]);
}
printf("%d\n", h[u]); //叶子自己的值
return;
}
tmp[idx++] = h[u]; //存入路径
if( r<=n ){
fmax &= (h[r]<=h[u]);
fmin &= (h[r]>=h[u]);
dfs(r, fmax, fmin);
}
if( l<=n ){
fmax &= (h[l]<=h[u]);
fmin &= (h[l]>=h[u]);
dfs(l, fmax, fmin);
}
idx--; //弹出路径
}
int main(){
scanf("%d", &n);
for( int i=1; i<=n; i++ ) scanf("%d", &h[i]);
bool fmax=true, fmin=true;
dfs(1, fmax, fmin);
if( fmax && !fmin ) puts("Max Heap");
else if( fmin && !fmax ) puts("Min Heap");
else puts("Not Heap");
return 0;
}