1.存储链表
2.找寻合适的链表
3.分段判断是否需要逆序
4.玄学.....cout<<-1 << endl;答案全错 改为printf("-1\n") AC了....
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 10e5+5;
struct Point {
int val;
// int next;
int pre;
} L[N];
int pos[N];
int main() {
ios::sync_with_stdio(false);
int s, n, m;
cin >> s >> n >> m;
for(int i=0; i<n; i++) {
int u, v, nx;
cin >> u >> v >> nx;
L[u].val = v;
// L[u].next = nx;
L[nx].pre = u;
}
int cnt = 0;
int No=0;
for(int i=-1; ; i=L[i].pre) {
pos[cnt++] = i;
if(i == s) break;
}
// cout << cnt << "==" << m << endl;
for(int i=0; i<cnt; i+=m) {
if(cnt-i>m) {
if(i!=0) {
printf("%05d\n", pos[cnt-i-m]);
}
for(int j=0; j<m-1; j++) {
printf("%05d %d %05d\n", pos[cnt-i-m+j] , L[pos[cnt-i-m+j]].val , L[pos[cnt-i-m+j]].pre);
}
printf("%05d %d ",pos[cnt-i-1], L[pos[cnt-i-1]].val);
} else {
if(cnt > m) {
for(i=i+1; i<cnt; i++) {
printf("%05d\n%05d %d ", pos[cnt-i], pos[cnt-i] ,L[pos[cnt-i]].val);
}
printf("-1\n");
} else {
printf("%05d %d ", pos[cnt-1], L[pos[cnt-1]].val);
for(i=2; i<cnt; i++) {
printf("%05d\n%05d %d ", pos[cnt-i], pos[cnt-i] ,L[pos[cnt-i]].val);
}
printf("-1\n");
}
}
}
return 0;
}