和 1074一样的方法,只需要管自己的结点就可以了,不需要处理next,
注意最后一个测试点,测试数据最终结果 为0个结点,只需要输出
0 -1
附本人AC代码:
#include<iostream>
#include<vector>
#include<map>
#include<algorithm>
using namespace std;
struct Node {
int add, val, next;
};
map<int, Node>Ma;
bool cmp(Node&A, Node&B) {
return A.val < B.val;
}
int main() {
int N, add;
Node tmp;
scanf("%d%d", &N, &add);
for (int i = 0; i < N; i++) {
scanf("%d%d%d", &tmp.add, &tmp.val, &tmp.next);
Ma[tmp.add] = tmp;
}
vector<Node>ans;
while (add != -1) {
ans.push_back(Ma[add]);
add = Ma[add].next;
}
sort(ans.begin(), ans.end(), cmp);
if (ans.size() == 0)printf("0 -1\n");
else printf("%d %05d\n", ans.size(), ans[0].add);
for (int i = 0; i < ans.size(); i++) {
if (i != ans.size() - 1)printf("%05d %d %05d\n", ans[i].add, ans[i].val, ans[i + 1].add);
else printf("%05d %d -1", ans[i].add, ans[i].val);
}
return 0;
}