前言
传送门
正文
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+10;
struct Node{
int addr,data,next;
bool flag;
int order;
}node[N];
bool cmp(Node a,Node b){
if(!a.flag||!b.flag) return a.flag>b.flag;
else return a.order<b.order;
}
int main(){
for(int i=0;i<N;i++){
node[i].flag=false;
node[i].order=N;
}
int head,n,k;
cin>>head>>n>>k;
int addr,data,next;
for(int i=0;i<n;i++){
cin>>addr>>data>>next;
node[addr]={addr,data,next};
}
int p=head,cnt=0;
while(p!=-1){
node[p].flag=true;
node[p].order=cnt++;
p=node[p].next;
}
sort(node,node+N,cmp);
for(int i=0;i<cnt/k;i++){
for(int j=(i+1)*k-1;j>i*k;j--){
printf("%05d %d %05d\n",node[j].addr,node[j].data,node[j-1].addr);
}
printf("%05d %d ",node[i*k].addr,node[i*k].data);
if(i<cnt/k-1){
printf("%05d\n",node[(i+2)*k-1].addr);
}else{
if((i+1)*k==cnt){
printf("-1\n");
}else{
printf("%05d\n",node[(i+1)*k].addr);
for(int i=cnt/k*k;i<cnt;i++){
printf("%05d %d ",node[i].addr,node[i].data);
if(i<cnt-1)printf("%05d\n",node[i+1].addr);
else printf("-1\n");
}
}
}
}
return 0;
}