方法:先用遍历确定有效结点,再排序,输出有效结点。
注意点:有效结点为零的情况。
#include <iostream>
#include <algorithm>
using namespace std;
struct node{
int address,data,flag,next;
node(){
flag=0;
}
}no[100010];
bool cmp(node a,node b){
return a.flag!=b.flag?a.flag>b.flag:a.data<b.data;
}
int main(){
int N,start,countn=0,ad;
scanf("%d%d",&N,&start);
for(int i=0;i<N;i++){
scanf("%d",&ad);
scanf("%d%d",&no[ad].data,&no[ad].next);
no[ad].address=ad;
}
while(start!=-1){
no[start].flag=1;
start=no[start].next;
countn++;
}
if(countn==0){
printf("0 -1");
return 0;
}
sort(no,no+100010,cmp);
printf("%d %05d\n",countn,no[0].address);
for(int i=0;i<countn-1;i++)
printf("%05d %d %05d\n",no[i].address,no[i].data,no[i+1].address);
printf("%05d %d -1\n",no[countn-1].address,no[countn-1].data);
return 0;
}