# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1211356 | walizamanee | Scales (IOI15_scales) | C++20 | 0 ms | 0 KiB |
#include<bits/stdc++.h>
using namespace std;
using ll = long long;
int t , n , q , shesh[300001] , one , two , three , par[300001] , me , him , ans;
long long b[300001] , col[300001] , chotocol[300001] , ek , dui;
vector<vector<int>> arr;
set<int> baki[300001];
void comb( int mi , int hi ) {
me = par[mi];
him = par[hi];
if( me != him ) {
if( baki[me].size() < baki[him].size() ) swap( me , him );
chotocol[me] = min( chotocol[me] , chotocol[him] );
for( auto it = baki[him].begin(); it != baki[him].end(); ++it ) {
baki[me].insert(*it);
par[*it] = me;
}
baki[him].clear();
}
}
int main() {
cin >> t;
while(t--){
cin >> n >> q;
ans = 0;
arr.clear();
for( int z = 1; z <= n; z++ ) {
cin >> b[z];
shesh[z] = -1;
par[z] = z;
chotocol[z] = (ll)1e10;
baki[z].clear();
baki[z].insert(z);
}
for( int z = 0; z < q; z++ ) {
cin >> one >> two >> three;
arr.push_back({one , two , three});
shesh[three] = z;
}
for( int z = 1; z <= n; z++ ) {
if( shesh[z] == -1 ) {
baki[z].clear();
col[z] = b[z];
chotocol[z] = b[z];
}
}
for( int z = 0; z < q; z++ ) {
if( shesh[arr[z][2]] == z ) {
comb( arr[z][0] , arr[z][1] );
comb( arr[z][0] , arr[z][2] );
one = par[arr[z][0]];
//cout << one << " " << chotocol[one] << "\n";
if( chotocol[one] < b[arr[z][2]] ) ans = -1;
else{
//cout << "lol" << b[arr[z][2]] << "\n";
if( baki[one].size() == 0 ) {
if( chotocol[one] != b[arr[z][2]] ) ans = -1;
}
else{
for( auto it = baki[one].begin(); it != baki[one].end(); ++it ) {
col[*it] = b[arr[z][2]];
}
baki[one].clear();
chotocol[one] = b[arr[z][2]];
}
}
}
else{
comb( arr[z][0] , arr[z][1] );
comb( arr[z][0] , arr[z][2] );
}
}
for( int z = 1; z <= n; z++ ) {
if( baki[z].size() != 0 ) {
for( auto it = baki[z].begin(); it != baki[z].end(); ++it ) {
col[*it] = chotocol[z];
}
baki[z].clear();
}
}
if( ans == -1 ) cout << -1 ;
else for( int z = 1; z <= n; z++ ) cout << col[z] << " ";
cout << "\n";
}
return 0;
}