A1052 Linked List Sorting (25 分)
#include <string>
#include <iostream>
#include <math.h>
#include <algorithm>
using namespace std;
struct hello{
int add,date,next,x;
}p[100000];
bool cmp(hello a,hello b){
if(a.x==0||b.x==0)return a.x>b.x;
else return a.date<b.date;
}
int main(){
int n,i,dd,di,count=0;
for(i=0;i<100000;i++){
p[i].x=0;
}
cin>>n>>dd;
for(i=0;i<n;i++){
scanf("%d",&di);
p[di].add=di;
scanf("%d %d",&p[di].date,&p[di].next);
}
i=dd;
while(i!=-1){
p[i].x=1;
count++;
i=p[i].next;
}
if(count==0){
printf("0 -1\n");
return 0;
}
sort(p,p+100000,cmp);
for(i=0;i<n-1;i++){
p[i].next=p[i+1].add;
}
p[i].next=-1;
printf("%d %05d\n",count,p[0].add);
for(i=0;i<count-1;i++){
printf("%05d %d %05d\n",p[i].add,p[i].date,p[i].next);
}
printf("%05d %d -1",p[i].add,p[i].date);
return 0;
}