提交时间:2024-12-11 19:37:50
运行 ID: 35482
#include<bits/stdc++.h> using namespace std; long long n,m; long long j[1000006],ls[1000006],rs[1000006]; long long sw[1000006],p[1000006],top; long long dfs(long long now){ if(j[now]!=-1)return j[now]; if(rs[now]!=-1){ long long lans=dfs(ls[now]),rans=dfs(rs[now]); if(lans<rans){ sw[now]=1; return lans; } else{ sw[now]=2; return rans; } } else{ sw[now]=1; return dfs(ls[now]); } } void dfs2(long long now){ if(j[now]!=-1){ p[++top]=j[now]; return; } else if(sw[now]==1){ dfs2(ls[now]); if(rs[now]!=-1)dfs2(rs[now]); } else{ dfs2(rs[now]); dfs2(ls[now]); } } int main(){ scanf("%lld%lld",&n,&m); for(int i=1;i<=n;i++){ scanf("%lld",&j[i]); } for(int i=1;i<=n;i++){ long long op; scanf("%lld",&op); if(op==2){ long long t1,t2; scanf("%lld%lld",&t1,&t2); ls[i]=t1,rs[i]=t2; } else if(op==1){ long long t1; scanf("%lld",&t1); ls[i]=t1,rs[i]=-1; } else{ ls[i]=rs[i]=-1; } } dfs(1); dfs2(1); for(int i=1;i<=m;i++){ printf("%lld ",p[i]); } }