思路:将所有节点sort一下,按从小到大输出
坑点:给出节点可能有无效节点,故需要先把输入保存起来,再找出有效节点,另外还有全是无效节点的特殊情况。
AC代码如下:
#include <iostream>
#include <algorithm>
using namespace std;
const int max_n = 100010;
struct Node{
int add;
int key;
int nadd;
} node[max_n],rnode[max_n];
bool cmp(Node a,Node b){
return a.key < b.key;
}
int main(){
int N,count=0;
int head;
cin>>N>>head;
int address;
for(int i = 0; i < N; i++){
cin>>address;
node[address].add = address;
cin>>node[address].key>>node[address].nadd;
}
address = head;
while(address != -1){
rnode[count] = node[address];
count++;
address = node[address].nadd;
}
sort(rnode,rnode+count,cmp);
if(count == 0) printf("0 -1");
else{
printf("%d %05d\n",count,rnode[0].add);
for(int i = 0; i < count - 1; i++){
printf("%05d %d %05d\n",rnode[i].add,rnode[i].key,rnode[i+1].add);
}
printf("%05d %d -1\n",rnode[count-1].add,rnode[count-1].key);
}
return 0;
}