#include<iostream>
#include<algorithm>
using namespace std;
struct node{
int address;
int key;
int next;
int exist;
}nodes[100005];
bool cmp1(node a,node b)
{
if(a.exist==0||b.exist==0)
return a.exist>b.exist;
else
return a.key<b.key;
}
int main()
{
int n,head;
cin>>n>>head;
int a,k,ne;
for(int i=0;i<100005;i++)
nodes[i].exist=0;
for(int i=0;i<n;i++)
{
cin>>a>>k>>ne;
nodes[a].address=a;
nodes[a].key=k;
nodes[a].next=ne;
nodes[a].exist=1; //千万别写成node[i]的赋值了!
}
int sum=0;
int p=head;
while(p!=-1)
{
sum++;
nodes[p].exist=1;
p=nodes[p].next;
}
sort(nodes,nodes+100005,cmp1); //这里的排序,要排的是整个数组!!!所以是nodes+100005,不是nodes+n!!!!!
if(sum==0)
cout<<"0 -1";
else
{
printf("%d %05d\n",sum,nodes[0].address);
for(int i=0;i<sum;i++)
{
if(i!=sum-1)
printf("%05d %d %05d\n",nodes[i].address,nodes[i].key,nodes[i+1].address);
else
printf("%05d %d -1\n",nodes[i].address,nodes[i].key);
}
}
return 0;
}
恨不得已经是照着算法笔记写的了,还是看不出来哪里有问题。。。
跟柳婼的比也看不出来自己哪写的不一样,服了。