已AC,具体过程看注释。
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
typedef struct node
{
int pre;
int data;
int next;
int flag;
}Node;
bool cmp(Node a,Node b)
{
return a.flag<b.flag;
}
int main()
{
Node que[100000];
map<int,int>M;
int begin,n,a,i,j,cnt,cnt1=0,cnt2=0;
cin>>begin>>n;
for (i=0;i<100000;i++)
que[i].flag=200000;
for (i=0;i<n;i++)
{
cin>>a;
cin>>que[a].data>>que[a].next;
que[a].pre=a;
}
for (i=begin;i!=-1;i=que[i].next)
{
if (M[abs(que[i].data)]==1)
que[i].flag=100000 + cnt2++;
else
{
M[abs(que[i].data)]=1;
que[i].flag=cnt1++;
}
}
sort(que,que+100000,cmp);
cnt=cnt1+cnt2;
for (i=0;i<cnt;i++)
{
if (i!=cnt-1&&i!=cnt1-1)
printf("%05d %d %05d\n",que[i].pre,que[i].data,que[i+1].pre);
else
printf("%05d %d -1\n",que[i].pre,que[i].data);
}
}