题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805262953594880

用了很多属性,虽然复杂但是不难

代码

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. const int maxn = 100010;
  5. struct Node{
  6. int add, data, next;
  7. int level, seq;
  8. bool flag;
  9. }node[maxn];
  10. bool cmp(Node a, Node b){
  11. if(a.flag == false || b.flag == false) return a.flag > b.flag;
  12. else if(a.level != b.level) return a.level < b.level;
  13. else return a.seq < b.seq;
  14. }
  15. int main(){
  16. for(int i = 0; i < maxn; i++){
  17. node[i].flag = false;
  18. }
  19. int frist, n, k;
  20. scanf("%d%d%d", &frist, &n, &k);
  21. int temp_add;
  22. for(int i = 0; i < n; i++){
  23. scanf("%d", &temp_add);
  24. node[temp_add].add = temp_add;
  25. scanf("%d%d", &node[temp_add].data, &node[temp_add].next);
  26. if(node[temp_add].data < 0) node[temp_add].level = 1;
  27. else if(node[temp_add].data <= k) node[temp_add].level = 2;
  28. else node[temp_add].level = 3;
  29. }
  30. int p = frist, count = 0;
  31. while(p != -1){
  32. node[p].flag = true;
  33. node[p].seq = count;
  34. p = node[p].next;
  35. count++;
  36. }
  37. sort(node, node + maxn, cmp);
  38. for(int i = 0; i < count; i++){
  39. printf("%05d %d ", node[i].add, node[i].data);
  40. if(i != count - 1) printf("%05d\n", node[i + 1].add);
  41. else printf("-1\n");
  42. }
  43. }