利用基数排序:
#include <bits//stdc++.h>
using namespace std;struct
{
int a,b,c;
int next;
}elem[2001];
int main()
{
int n,m;
cin>>n>>m;
int a,b,c;
for(int i=1;i<=n;i++)
{
cin>>a>>b>>c;
elem[i].next=i+1;
elem[i].a=a;
elem[i].b=b;
elem[i].c=c;
}
elem[0].next=1;elem[n].next=-1;
int k,p,j,q;
int f3[60],e3[60];
memset(f3,0,sizeof(f3));
p=elem[0].next;
while(p!=-1)
{
k=elem[p].b;
if(f3[k]==0) f3[k]=p;
else elem[e3[k]].next=p;
e3[k]=p;
p=elem[p].next;
}
j=0;
while(f3[j]==0) j++;
elem[0].next=f3[j];
q=e3[j];
for(int i=j+1;i<60;i++)
if(f3[i]!=0)
{
elem[q].next=f3[i];
q=e3[i];
}
elem[q].next=-1;
int f2[24],e2[24];
memset(f2,0,sizeof(f2));
p=elem[0].next;
while(p!=-1)
{
k=elem[p].a;
if(f2[k]==0) f2[k]=p;
else elem[e2[k]].next=p;
e2[k]=p;
p=elem[p].next;
}
j=0;
while(f2[j]==0) j++;
elem[0].next=f2[j];
q=e2[j];
for(int i=j+1;i<24;i++)
if(f2[i]!=0)
{
elem[q].next=f2[i];
q=e2[i];
}
elem[q].next=-1;
int f1[5001],e1[5001];
memset(f1,0,sizeof(f1));
p=elem[0].next;
while(p!=-1)
{
k=elem[p].c;
if(f1[k]==0) f1[k]=p;
else elem[e1[k]].next=p;
e1[k]=p;
p=elem[p].next;
}
j=5000;
while(f1[j]==0) j--;
elem[0].next=f1[j];
q=e1[j];
for(int i=j-1;i>0;i--)
if(f1[i]!=0)
{
elem[q].next=f1[i];
q=e1[i];
}
elem[q].next=-1;
p=elem[0].next;
for(int i=0;i<m;i++)
{
a=elem[p].a;
b=elem[p].b;
c=elem[p].c;
printf("%d %d %d\n",a,b,c);
p=elem[p].next;
}
return 0;
}