Code
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MAXN = 1e5 + 3;
int main(void) {
int head, N, K;
int elem[MAXN], next[MAXN];
vector<int> v;
scanf("%d %d %d", &head, &N, &K);
for (int i = 0; i < N; i++) {
int address, data, nextAddress;
scanf("%d %d %d", &address, &data, &nextAddress);
elem[address] = data;
next[address] = nextAddress;
}
for (int i = head; i != -1; i = next[i]) {
v.push_back(i);
}
for (int i = 0; i + K - 1 < v.size(); i += K) { // 要注意是反转每K个元素
reverse(v.begin() + i, v.begin() + i + K);
}
for (int i = 0; i < v.size(); ++i) {
printf("%05d %d ", v[i], elem[v[i]]);
if (i + 1 == v.size())
printf("-1\n");
else
printf("%05d\n", v[i+1]);
}
return 0;
}