这个题有两个测试点要注意。
1、可能会给无效数据,所以最后输出个数不一定是n。
2、可能没有有效数据,要输出“0 -1”。
#include <bits/stdc++.h>
using namespace std;
struct node {
int val, next;
}Node[100100];
vector<int> v;
bool cmp (int a, int b) {
return Node[a].val < Node[b].val;
}
int main() {
int n, fAd, ad, val, next;
scanf ("%d %d", &n, &fAd);
for (int i = 0; i < n; i++) {
scanf ("%d %d %d", &ad, &val, &next);
Node[ad].val = val;
Node[ad].next = next;
}
while (fAd != -1) {
v.push_back(fAd);
fAd = Node[fAd].next;
}
sort (v.begin(), v.end(), cmp);
if (v.size() == 0) {
printf ("0 -1");
return 0;
}
printf ("%d %05d\n", v.size(), v[0]);
for (int i = 0; i < v.size(); i++) {
if (i != v.size() - 1)
printf ("%05d %d %05d\n", v[i], Node[v[i]].val, v[i + 1]);
else
printf ("%05d %d -1\n", v[i], Node[v[i]].val);
}
}
处理无效数据与空结果:算法分析与代码优化
490

被折叠的 条评论
为什么被折叠?



