传送门:传送门
思路:直接数组模拟即可,先遍历一遍链表剔除多余节点(即由起始节点访问不到的节点),然后排序,直接输出计科,注意链表中没有元素的情况。
代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
struct node {
int ad , key , next;
bool operator < (const node b) const {
return key < b.key;
}
}a[maxn];
vector <node> v;
int mp[maxn];
int main() {
int n , st;
scanf("%d%d" , &n , &st);
for(int i = 0 ; i < n ; ++i) {
scanf("%d%d%d" , &a[i].ad , &a[i].key , &a[i].next);
if(a[i].ad != -1)
mp[a[i].ad] = i;
}
while(st != -1) {
v.push_back(a[mp[st]]);
st = a[mp[st]].next;
}
sort(v.begin() , v.end());
if(v.size() == 0)printf("0 -1\n");
else {
printf("%d %05d\n" , v.size() , v[0].ad);
for(int i = 0 ; i < v.size() ; i++) {
if(i < v.size() - 1) {
printf("%05d %d %05d\n" , v[i].ad , v[i].key , v[i + 1].ad);
}
else {
printf("%05d %d -1\n" , v[i].ad , v[i].key);
}
}
}
return 0;
}