用algorithm中的reverse函数比较方便
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int start,N,K;
vector<int> L,ans;
int cnt=0;
struct node{
int data,next;
}Node[100000];
void trail(int index){
if(index==-1) return;
L.push_back(index);
trail(Node[index].next);
}
int main(){
cin>>start>>N>>K;
for(int i=0;i<N;i++){
int index;
scanf("%d",&index);
scanf("%d %d",&Node[index].data,&Node[index].next);
}
trail(start);
reverse(L.begin(),L.end());
int remain=L.size()%K;
reverse(L.begin(),L.begin()+remain);
for(int i=remain;i<L.size();i+=K){
reverse(L.begin()+i,L.begin()+i+K);
}
for(int i=0;i<L.size();i++){
if(i==0){
printf("%05d %d ",L[i],Node[L[i]].data);
}else{
printf("%05d\n%05d %d ",L[i],L[i],Node[L[i]].data);
}
}
printf("-1\n");
return 0;
}