![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/f718204726aaa4eb76430589322441bf.png)
样例(可复制)
5 00001
11111 100 -1
00001 0 22222
33333 100000 11111
12345 -1 33333
22222 1000 12345
5 12345
12345 -1 00001
00001 0 11111
11111 100 22222
22222 1000 33333
33333 100000 -1
注意点
- 本题节点数为0时(即开始地址为start=-1)需要特判输出,本题不会出现开始地址不为-1,但给出的所有节点都没出现开始地址的节点的情况
#include<bits/stdc++.h>
using namespace std;
const int maxn=100010;
struct Node{
int add,next,data,flag;
Node(){flag=0;};
}node[maxn];
bool cmp(Node a,Node b){
if(a.flag&&b.flag)return a.data<b.data;
else return a.flag>b.flag;
}
int main(){
int n,start;
cin>>n>>start;
int add,data,next,count=0;
while(n--){
scanf("%d %d %d",&add,&data,&next);
node[add].add=add;
node[add].data=data;
node[add].next=next;
}
for(int p=start;p!=-1;p=node[p].next){
node[p].flag=1;
count++;
}
if(count==0){
cout<<"0 -1\n";
}else{
sort(node,node+maxn,cmp);
printf("%d %05d\n",count,node[0].add);
for(int i=0;i<count;i++){
if(i!=count-1){
printf("%05d %d %05d\n",node[i].add,node[i].data,node[i+1].add);
}else{
printf("%05d %d -1\n",node[i].add,node[i].data);
}
}
}
return 0;
}