-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1097.cpp
64 lines (62 loc) · 1.42 KB
/
1097.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <iostream>
#include <sstream>
#include <vector>
#include <list>
#include <queue>
#include <algorithm>
#include <iomanip>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <string>
#include <set>
#include <stack>
#include <cstdio>
#include <cstring>
#include <climits>
#include <cstdlib>
#include <memory>
#include <valarray>
using namespace std;
struct Node {
int val, addr, next;
};
int main() {
#ifdef _DEBUG
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
int n, head, addr;
unique_ptr<Node[]> mem(new Node[100000]);
scanf("%d %d", &head, &n);
while (n--) {
scanf("%d", &addr);
scanf("%d %d", &mem[addr].val, &mem[addr].next);
mem[addr].addr = addr;
}
unordered_map<int, bool> visited;
vector<Node> li, removed;
for (int p = head; p != -1; p = mem[p].next) {
if (visited.find(abs(mem[p].val)) != visited.end())
removed.push_back(mem[p]);
else {
visited[abs(mem[p].val)] = true;
li.push_back(mem[p]);
}
}
for (int i = 0; i < li.size(); i++) {
printf("%05d %d ", li[i].addr, li[i].val);
if (i != li.size() - 1)
printf("%05d\n", li[i + 1].addr);
else
printf("-1\n");
}
for (int i = 0; i < removed.size(); i++) {
printf("%05d %d ", removed[i].addr, removed[i].val);
if (i != removed.size() - 1)
printf("%05d\n", removed[i + 1].addr);
else
printf("-1\n");
}
return 0;
}