G

Untitled

public
Guest May 31, 2025 Never 28
Clone
C++ paste1.cpp 84 lines (70 loc) | 1.84 KB
1
#include <bits/stdc++.h>
2
3
#define boAshraf ios_base::sync_with_stdio(false); cin.tie(NULL);
4
#define ll long long
5
#define sz(s) (int)(s).size()
6
#define all(s) (s).begin(),(s).end()
7
using namespace std;
8
9
void File();
10
11
void sol();
12
13
int main() {
14
boAshraf
15
File();
16
int t = 1;
17
cin >> t;
18
while (t--) {
19
sol();
20
}
21
return 0;
22
}
23
24
void sol() {
25
int n, q;
26
cin >> n >> q;
27
28
vector<int> b(n + 1);
29
vector<tuple<int, int, int>> ops(q + 1);
30
for (int i = 1; i <= n; ++i) cin >> b[i];
31
for (int i = 1; i <= q; ++i) {
32
auto &[x, y, z] = ops[i];
33
cin >> x >> y >> z;
34
}
35
36
int tot = n + q;
37
vector<vector<int>> adj(tot + 1);
38
vector<int> last(n + 1);
39
iota(last.begin(), last.end(), 0);
40
41
for (int i = 1; i <= q; ++i) {
42
auto &[x, y, z] = ops[i];
43
int u = n + i;
44
45
adj[u] = {last[x], last[y]};
46
47
last[z] = u;
48
}
49
50
vector<int> ans(tot + 1), vis(tot + 1);
51
for (int i = 1; i <= n; ++i) {
52
int u = last[i];
53
ans[u] = b[i];
54
vis[u] = 1;
55
}
56
57
for (int v = tot; v >= 1; --v) {
58
for (auto u: adj[v]) {
59
if (ans[v] > ans[u]) {
60
if (vis[u])return void(cout << "-1\n");
61
ans[u] = ans[v];
62
}
63
}
64
}
65
auto check = [&](vector<int> ans, vector<tuple<int, int, int>> q) -> bool {
66
for (auto [x, y, z]: q)ans[z] = min(ans[x], ans[y]);
67
for (int i = 1; i <= n; i++) {
68
if (ans[i] != b[i])return 0;
69
}
70
return 1;
71
};
72
if (!check(ans, ops))return void(cout << "-1\n");
73
74
for (int i = 1; i <= n; ++i) {
75
cout << ans[i] << " \n"[i == n];
76
}
77
}
78
79
void File() {
80
#ifndef ONLINE_JUDGE
81
freopen("input.txt", "r", stdin);
82
freopen("output.txt", "w", stdout);
83
#endif
84
}