//
// main.cpp
// PATA1097
//
// Created by Phoenix on 2018/2/21.
// Copyright © 2018年 Phoenix. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
const int maxn = 100010;
int flag[maxn] = {0};
struct Node {
int data;
int add, next;
int num;
int flag;
}node[maxn];
bool cmp(Node a, Node b) {
if(a.flag != b.flag) return a.flag > b.flag;
else return a.num < b.num;
}
int main(int argc, const char * argv[]) {
int begin, n;
scanf("%d %d", &begin, &n);
for(int i = 0; i < n; i++) {
int address, data, next;
scanf("%d %d %d", &address, &data, &next);
node[address].add = address;
node[address].data = data;
node[address].next = next;
}
int s1 = begin;
int num1 = 0, num2 = 0;
while(s1 != -1) {
if(flag[abs(node[s1].data)] == 0) {
flag[abs(node[s1].data)] = 1;
node[s1].flag = 2;
node[s1].num = num1++;
} else{
node[s1].flag = 1;
node[s1].num = num2++;
}
s1 = node[s1].next;
}
sort(node, node + maxn, cmp);
for(int i = 0; i < num1; i++) {
if(i < num1 - 1){
printf("%05d %d %05d\n", node[i].add, node[i].data, node[i + 1].add);
}else{
printf("%05d %d -1\n", node[i].add, node[i].data);
}
}
for(int i = num1; i < num1 + num2; i++) {
if(i < num1 + num2 - 1){
printf("%05d %d %05d\n", node[i].add, node[i].data, node[i + 1].add);
}else{
printf("%05d %d -1\n", node[i].add, node[i].data);
}
}
return 0;
}
PATA1097题解
最新推荐文章于 2021-07-26 20:29:09 发布