Untitled
public
May 31, 2025
Never
28
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 }