提交时间:2024-12-18 18:45:46
运行 ID: 35622
#include<bits/stdc++.h> using namespace std; const int inf=1e9+7; int g[1000005][3]; int data[1000005]; bool pd[1000005]; int f[1000005]; bool bj[1000005]; int dg(int id) { if(id==0) { return inf; } if(data[id]!=-1) { return f[id]; } int ret1=dg(g[id][1]),ret2=dg(g[id][2]); if(ret1<ret2) { bj[id]=false; } else { bj[id]=true; } return min(ret1,ret2); } void cxdg(int id) { if(id==0) { return ; } if(data[id]!=-1) { cout<<data[id]<<' '; return ; } if(bj[id]==false) { cxdg(g[id][1]); cxdg(g[id][2]); } } int main() { freopen("T2.in","r",stdin); freopen("T2.out","w",stdout); int n,m; cin>>n>>m; for(int i=1;i<=n;i++) { cin>>data[i]; int x=data[i]; while(x>0) { f[i]=x%10; x/=10; } // cout<<f[i]<<' '; } for(int i=1;i<=n;i++) { int x; cin>>x; for(int j=1;j<=x;j++) { cin>>g[i][j]; pd[g[i][j]]=true; } } int root; for(int i=1;i<=n;i++) { if(pd[i]==false) { root=i; break; } } dg(root); cxdg(root); return 0; }