题目传送门
处理方式和这道题很相似
记录每一个block的起始结点,倒着把每一个block输出即可
这道题的测试数据真的不太科学
一开始读入数据的时候,我手滑写成了for (int i = 1; i <= 8; ++i)
过了样例后直接提交,只有最后两个点提示了段错误
没想到犯了这么低级的错误,还可以卡过80%的数据
#include#include #include #include using namespace std; const int N = 100010; struct node { int x; int nxt; }; node list[N]; int n, m, start; int a[N]; int main() { scanf("%d%d%d", &start, &n, &m); for (int i = 1; i <= n; ++i) { int addr, x, nxt; scanf("%d%d%d", &addr, &x, &nxt); list[addr].x = x; list[addr].nxt = nxt; } int tot = 0; int o = start; while (o != -1) { int j = o; int cnt = 0; while (j != -1 && cnt < m) { ++cnt; j = list[j].nxt; } a[++tot] = o; o = j; } for (int i = tot; i >= 1; --i) { int k = a[i]; for (int j = 1; j < m && list[k].nxt != -1; ++j) { printf("%05d %d %05dn",k, list[k].x, list[k].nxt); k = list[k].nxt; } if (i != 1) printf("%05d %d %05dn", k, list[k].x, a[i-1]); else printf("%05d %d -1n", k, list[k].x); } return 0; }



