简单题。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<map>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std; const int maxn=+;
int root,n;
struct Node
{
int id,val,nx;
}tmp[maxn],s[maxn]; int in[maxn];
int flag[maxn];
int idx[maxn];
int tot=;
vector<int>g[maxn]; int main()
{
memset(in,,sizeof in);
memset(flag,,sizeof flag);
scanf("%d%d",&root,&n);
for(int i=;i<=n;i++){
scanf("%d%d%d",&tmp[i].id,&tmp[i].val,&tmp[i].nx);
in[tmp[i].id]=i;
} int p=root,sz=;
while()
{
if(p==-) break;
s[sz++]=tmp[in[p]];
p=tmp[in[p]].nx;
} for(int i=;i<sz;i++)
{
if(flag[abs(s[i].val)]==) g[].push_back(i);
else g[].push_back(i);
flag[abs(s[i].val)]++;
} for(int i=;i<=;i++)
{
for(int j=;j<g[i].size();j++)
{
if(j==g[i].size()-)
printf("%05d %d %d\n",s[g[i][j]].id,s[g[i][j]].val,-);
else
printf("%05d %d %05d\n",s[g[i][j]].id,s[g[i][j]].val,s[g[i][j+]].id);
}
}
return ;
}