/*
* @Author: hungeazy
* @Date: 2025-11-22 17:12:38
* @Last Modified by: hungeazy
* @Last Modified time: 2025-11-22 17:52:14
*/
#include <bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
// #pragma GCC optimize("O3")
// #pragma GCC optimize("unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
using namespace std;
using namespace __gnu_pbds;
bool M1;
#define fast ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
#define int long long
#define ll long long
#define ull unsigned long long
#define sz(x) x.size()
#define sqr(x) (1LL * (x) * (x))
#define all(x) x.begin(), x.end()
#define fill(f,x) memset(f,x,sizeof(f))
#define FOR(i,l,r) for(int i=l;i<=r;i++)
#define FOD(i,r,l) for(int i=r;i>=l;i--)
#define debug(x) cout << #x << " = " << x << '\n'
#define ii pair<int,int>
#define iii pair<int,ii>
#define di pair<ii,ii>
#define vi vector<int>
#define vii vector<ii>
#define mii map<int,int>
#define fi first
#define se second
#define pb push_back
#define MOD 1000000007
#define __lcm(a,b) (1ll * ((a) / __gcd((a), (b))) * (b))
#define YES cout << "YES\n"
#define NO cout << "NO\n"
#define MASK(i) (1LL << (i))
#define c_bit(i) __builtin_popcountll(i)
#define BIT(x,i) ((x) & MASK(i))
#define SET_ON(x,i) ((x) | MASK(i))
#define SET_OFF(x,i) ((x) & ~MASK(i))
#define oo 1e18
#define name ""
#define endl '\n'
#define memory() cerr << abs(&M2-&M1)/1024.0/1024 << " MB" << endl
#define time() cerr << endl << "-------------Time:" << 1000.0 * clock() / CLOCKS_PER_SEC << "ms." << endl
template<typename T> bool maximize(T &res, const T &val) { if (res < val){ res = val; return true; }; return false; }
template<typename T> bool minimize(T &res, const T &val) { if (res > val){ res = val; return true; }; return false; }
template <class T> using ordered_set = tree <T, null_type, less_equal <T>, rb_tree_tag,tree_order_statistics_node_update>;
const int N = (int)1e5+10;
int n1,m1,n2,m2;
array<int,3> edge1[N],edge2[N];
namespace sub1 {
const int M = (int)1e6+10;
int par[M],sz[M];
bool approved() {
return n1 <= 1e3 and m1 <= 1e3;
}
struct DSU {
int n;
DSU() {};
DSU(int _n):
n(_n) {};
void init() {
FOR(i,1,n)
{
par[i] = i;
sz[i] = 1;
}
}
int acs(int u) {
return (u == par[u] ? u : par[u] = acs(par[u]));
}
bool join(int u, int v)
{
int x = acs(u), y = acs(v);
if (x != y)
{
if (sz[x] < sz[y]) swap(x,y);
sz[x] += sz[y];
par[y] = x;
return true;
}
return false;
}
} dsu;
void solve(void)
{
int totNodes = n1*n2;
vector<array<int,3>> edges;
FOR(i,1,m1)
{
auto [a,b,w] = edge1[i];
a--; b--;
FOR(v,0,n2-1)
{
int id1 = a*n2+v;
int id2 = b*n2+v;
edges.pb({id1,id2,w});
}
}
FOR(i,1,m2)
{
auto [a,b,w] = edge2[i];
a--; b--;
FOR(u,0,n1-1)
{
int id1 = u*n2+a;
int id2 = u*n2+b;
edges.pb({id1,id2,w});
}
}
sort(all(edges),[&](array<int,3> &x, array<int,3> &y) {
return x[2] < y[2];
});
dsu = DSU(totNodes);
dsu.init();
int tplt = totNodes, ans = 0;
for (auto [u,v,w] : edges)
{
if (dsu.join(u,v))
{
ans += w;
tplt--;
}
if (tplt == 1) break;
}
cout << (tplt == 1 ? ans : -1);
}
}
namespace sub2 {
array<int,4> edges[N<<1];
int par[N<<1],sz[N<<1];
struct DSU {
int n,tplt;
DSU() {};
DSU(int _n):
n(_n), tplt(_n) {};
void init() {
FOR(i,1,n)
{
par[i] = i;
sz[i] = 1;
}
}
int acs(int u) {
return (u == par[u] ? u : par[u] = acs(par[u]));
}
bool join(int u, int v)
{
int x = acs(u), y = acs(v);
if (x != y)
{
if (sz[x] < sz[y]) swap(x,y);
sz[x] += sz[y];
par[y] = x;
tplt--;
return true;
}
return false;
}
} dsu1,dsu2;
void solve(void)
{
FOR(i,1,m1)
{
auto [u,v,w] = edge1[i];
edges[i] = {u,v,w,0};
}
FOR(i,1,m2)
{
auto [u,v,w] = edge2[i];
edges[i+m1] = {u,v,w,1};
}
sort(edges+1,edges+m1+m2+1,[&](array<int,4> &x, array<int,4> &y) {
return x[2] < y[2];
});
dsu1 = DSU(n1); dsu2 = DSU(n2);
dsu1.init(); dsu2.init();
int ans = 0;
FOR(i,1,m1+m2)
if (edges[i][3])
{
auto [u,v,w,type] = edges[i];
if (dsu2.join(u,v))
ans += dsu1.tplt*w;
}
else
{
auto [u,v,w,type] = edges[i];
if (dsu1.join(u,v))
ans += dsu2.tplt*w;
}
cout << ans;
}
}
bool M2;
signed main()
{
fast;
if (fopen(name".inp","r"))
{
freopen(name".inp","r",stdin);
freopen(name".out","w",stdout);
}
cin >> n1 >> m1;
FOR(i,1,m1)
{
int u,v,w;
cin >> u >> v >> w;
edge1[i] = {u,v,w};
}
cin >> n2 >> m2;
FOR(i,1,m2)
{
int u,v,w;
cin >> u >> v >> w;
edge2[i] = {u,v,w};
}
// if (sub1::approved()) return sub1::solve(), time(), memory(), 0;
sub2::solve();
time();
memory();
return 0;
}
// ██░ ██ █ ██ ███▄ █ ▄████
//▓██░ ██▒ ██ ▓██▒ ██ ▀█ █ ██▒ ▀█▒
//▒██▀▀██░▓██ ▒██░▓██ ▀█ ██▒▒██░▄▄▄░
//░▓█ ░██ ▓▓█ ░██░▓██▒ ▐▌██▒░▓█ ██▓
//░▓█▒░██▓▒▒█████▓ ▒██░ ▓██░░▒▓███▀▒
// ▒ ░░▒░▒░▒▓▒ ▒ ▒ ░ ▒░ ▒ ▒ ░▒ ▒
// ▒ ░▒░ ░░░▒░ ░ ░ ░ ░░ ░ ▒░ ░ ░
// ░ ░░ ░ ░░░ ░ ░ ░ ░ ░ ░ ░ ░
// ░ ░ ░ ░ ░ ░
LyoKKiBAQXV0aG9yOiBodW5nZWF6eQoqIEBEYXRlOiAgIDIwMjUtMTEtMjIgMTc6MTI6MzgKKiBATGFzdCBNb2RpZmllZCBieTogICBodW5nZWF6eQoqIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjUtMTEtMjIgMTc6NTI6MTQKKi8KI2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNpbmNsdWRlIDxleHQvcGJfZHMvYXNzb2NfY29udGFpbmVyLmhwcD4gCiNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPiAKLy8gI3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk8zIikgIAovLyAjcHJhZ21hIEdDQyBvcHRpbWl6ZSgidW5yb2xsLWxvb3BzIikgIAovLyAjcHJhZ21hIEdDQyB0YXJnZXQoImF2eDIsYm1pLGJtaTIscG9wY250LGx6Y250IikgIAp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsgCmJvb2wgTTE7CiNkZWZpbmUgZmFzdCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7CiNkZWZpbmUgaW50IGxvbmcgbG9uZwojZGVmaW5lIGxsIGxvbmcgbG9uZyAKI2RlZmluZSB1bGwgdW5zaWduZWQgbG9uZyBsb25nCiNkZWZpbmUgc3ooeCkgeC5zaXplKCkKI2RlZmluZSBzcXIoeCkgKDFMTCAqICh4KSAqICh4KSkKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLCB4LmVuZCgpCiNkZWZpbmUgZmlsbChmLHgpIG1lbXNldChmLHgsc2l6ZW9mKGYpKQojZGVmaW5lIEZPUihpLGwscikgZm9yKGludCBpPWw7aTw9cjtpKyspCiNkZWZpbmUgRk9EKGkscixsKSBmb3IoaW50IGk9cjtpPj1sO2ktLSkKI2RlZmluZSBkZWJ1Zyh4KSBjb3V0IDw8ICN4IDw8ICIgPSAiIDw8IHggPDwgJ1xuJwojZGVmaW5lIGlpIHBhaXI8aW50LGludD4KI2RlZmluZSBpaWkgcGFpcjxpbnQsaWk+CiNkZWZpbmUgZGkgcGFpcjxpaSxpaT4KI2RlZmluZSB2aSB2ZWN0b3I8aW50PgojZGVmaW5lIHZpaSB2ZWN0b3I8aWk+CiNkZWZpbmUgbWlpIG1hcDxpbnQsaW50PgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgTU9EIDEwMDAwMDAwMDcKI2RlZmluZSBfX2xjbShhLGIpICgxbGwgKiAoKGEpIC8gX19nY2QoKGEpLCAoYikpKSAqIChiKSkKI2RlZmluZSBZRVMgY291dCA8PCAiWUVTXG4iCiNkZWZpbmUgTk8gY291dCA8PCAiTk9cbiIKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIGNfYml0KGkpIF9fYnVpbHRpbl9wb3Bjb3VudGxsKGkpCiNkZWZpbmUgQklUKHgsaSkgKCh4KSAmIE1BU0soaSkpCiNkZWZpbmUgU0VUX09OKHgsaSkgKCh4KSB8IE1BU0soaSkpCiNkZWZpbmUgU0VUX09GRih4LGkpICgoeCkgJiB+TUFTSyhpKSkKI2RlZmluZSBvbyAxZTE4CiNkZWZpbmUgbmFtZSAiIgojZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIG1lbW9yeSgpIGNlcnIgPDwgYWJzKCZNMi0mTTEpLzEwMjQuMC8xMDI0IDw8ICIgTUIiIDw8IGVuZGwKI2RlZmluZSB0aW1lKCkgY2VyciA8PCBlbmRsIDw8ICItLS0tLS0tLS0tLS0tVGltZToiIDw8IDEwMDAuMCAqIGNsb2NrKCkgLyBDTE9DS1NfUEVSX1NFQyA8PCAibXMuIiA8PCBlbmRsCnRlbXBsYXRlPHR5cGVuYW1lIFQ+IGJvb2wgbWF4aW1pemUoVCAmcmVzLCBjb25zdCBUICZ2YWwpIHsgaWYgKHJlcyA8IHZhbCl7IHJlcyA9IHZhbDsgcmV0dXJuIHRydWU7IH07IHJldHVybiBmYWxzZTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBib29sIG1pbmltaXplKFQgJnJlcywgY29uc3QgVCAmdmFsKSB7IGlmIChyZXMgPiB2YWwpeyByZXMgPSB2YWw7IHJldHVybiB0cnVlOyB9OyByZXR1cm4gZmFsc2U7IH0KdGVtcGxhdGUgPGNsYXNzIFQ+IHVzaW5nIG9yZGVyZWRfc2V0ID0gdHJlZSA8VCwgbnVsbF90eXBlLCBsZXNzX2VxdWFsIDxUPiwgcmJfdHJlZV90YWcsdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKY29uc3QgaW50IE4gPSAoaW50KTFlNSsxMDsKaW50IG4xLG0xLG4yLG0yOwphcnJheTxpbnQsMz4gZWRnZTFbTl0sZWRnZTJbTl07CgpuYW1lc3BhY2Ugc3ViMSB7CgoJY29uc3QgaW50IE0gPSAoaW50KTFlNisxMDsKCWludCBwYXJbTV0sc3pbTV07CgoJYm9vbCBhcHByb3ZlZCgpIHsKCQlyZXR1cm4gbjEgPD0gMWUzIGFuZCBtMSA8PSAxZTM7Cgl9CgoJc3RydWN0IERTVSB7CgkJaW50IG47CgoJCURTVSgpIHt9OwoJCURTVShpbnQgX24pOgoJCQluKF9uKSB7fTsKCgkJdm9pZCBpbml0KCkgewoJCQlGT1IoaSwxLG4pCgkJCXsKCQkJCXBhcltpXSA9IGk7CgkJCQlzeltpXSA9IDE7CgkJCX0KCQl9CgoJCWludCBhY3MoaW50IHUpIHsKCQkJcmV0dXJuICh1ID09IHBhclt1XSA/IHUgOiBwYXJbdV0gPSBhY3MocGFyW3VdKSk7CgkJfQoKCQlib29sIGpvaW4oaW50IHUsIGludCB2KQoJCXsKCQkJaW50IHggPSBhY3ModSksIHkgPSBhY3Modik7CgkJCWlmICh4ICE9IHkpCgkJCXsKCQkJCWlmIChzelt4XSA8IHN6W3ldKSBzd2FwKHgseSk7CgkJCQlzelt4XSArPSBzelt5XTsKCQkJCXBhclt5XSA9IHg7CgkJCQlyZXR1cm4gdHJ1ZTsKCQkJfQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfSBkc3U7CgoJdm9pZCBzb2x2ZSh2b2lkKQoJewoJCWludCB0b3ROb2RlcyA9IG4xKm4yOwoJCXZlY3RvcjxhcnJheTxpbnQsMz4+IGVkZ2VzOwoJCUZPUihpLDEsbTEpCgkJewoJCQlhdXRvIFthLGIsd10gPSBlZGdlMVtpXTsKCQkJYS0tOyBiLS07CgkJCUZPUih2LDAsbjItMSkKCQkJewoJCQkJaW50IGlkMSA9IGEqbjIrdjsKCQkJCWludCBpZDIgPSBiKm4yK3Y7CgkJCQllZGdlcy5wYih7aWQxLGlkMix3fSk7CgkJCX0KCQl9CgkJRk9SKGksMSxtMikKCQl7CgkJCWF1dG8gW2EsYix3XSA9IGVkZ2UyW2ldOwoJCQlhLS07IGItLTsKCQkJRk9SKHUsMCxuMS0xKQoJCQl7CgkJCQlpbnQgaWQxID0gdSpuMithOwoJCQkJaW50IGlkMiA9IHUqbjIrYjsKCQkJCWVkZ2VzLnBiKHtpZDEsaWQyLHd9KTsKCQkJfQoJCX0KCQlzb3J0KGFsbChlZGdlcyksWyZdKGFycmF5PGludCwzPiAmeCwgYXJyYXk8aW50LDM+ICZ5KSB7CgkJCXJldHVybiB4WzJdIDwgeVsyXTsKCQl9KTsKCQlkc3UgPSBEU1UodG90Tm9kZXMpOwoJCWRzdS5pbml0KCk7CgkJaW50IHRwbHQgPSB0b3ROb2RlcywgYW5zID0gMDsKCQlmb3IgKGF1dG8gW3Usdix3XSA6IGVkZ2VzKQoJCXsKCQkJaWYgKGRzdS5qb2luKHUsdikpIAoJCQl7CgkJCQlhbnMgKz0gdzsKCQkJCXRwbHQtLTsKCQkJfQoJCQlpZiAodHBsdCA9PSAxKSBicmVhazsKCQl9CgkJY291dCA8PCAodHBsdCA9PSAxID8gYW5zIDogLTEpOwoJfQoJCn0KCm5hbWVzcGFjZSBzdWIyIHsKCglhcnJheTxpbnQsND4gZWRnZXNbTjw8MV07CglpbnQgcGFyW048PDFdLHN6W048PDFdOwoKCXN0cnVjdCBEU1UgewoJCWludCBuLHRwbHQ7CgoJCURTVSgpIHt9OwoJCURTVShpbnQgX24pOgoJCQluKF9uKSwgdHBsdChfbikge307CgoJCXZvaWQgaW5pdCgpIHsKCQkJRk9SKGksMSxuKQoJCQl7CgkJCQlwYXJbaV0gPSBpOwoJCQkJc3pbaV0gPSAxOwoJCQl9CgkJfQoKCQlpbnQgYWNzKGludCB1KSB7CgkJCXJldHVybiAodSA9PSBwYXJbdV0gPyB1IDogcGFyW3VdID0gYWNzKHBhclt1XSkpOwoJCX0KCgkJYm9vbCBqb2luKGludCB1LCBpbnQgdikKCQl7CgkJCWludCB4ID0gYWNzKHUpLCB5ID0gYWNzKHYpOwoJCQlpZiAoeCAhPSB5KQoJCQl7CgkJCQlpZiAoc3pbeF0gPCBzelt5XSkgc3dhcCh4LHkpOwoJCQkJc3pbeF0gKz0gc3pbeV07CgkJCQlwYXJbeV0gPSB4OwoJCQkJdHBsdC0tOwoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJcmV0dXJuIGZhbHNlOwoJCX0KCX0gZHN1MSxkc3UyOwoKCXZvaWQgc29sdmUodm9pZCkKCXsKCQlGT1IoaSwxLG0xKQoJCXsKCQkJYXV0byBbdSx2LHddID0gZWRnZTFbaV07CgkJCWVkZ2VzW2ldID0ge3Usdix3LDB9OwoJCX0KCQlGT1IoaSwxLG0yKQoJCXsKCQkJYXV0byBbdSx2LHddID0gZWRnZTJbaV07CgkJCWVkZ2VzW2krbTFdID0ge3Usdix3LDF9OwoJCX0KCQlzb3J0KGVkZ2VzKzEsZWRnZXMrbTErbTIrMSxbJl0oYXJyYXk8aW50LDQ+ICZ4LCBhcnJheTxpbnQsND4gJnkpIHsKCQkJcmV0dXJuIHhbMl0gPCB5WzJdOwoJCX0pOwoJCWRzdTEgPSBEU1UobjEpOyBkc3UyID0gRFNVKG4yKTsKCQlkc3UxLmluaXQoKTsgZHN1Mi5pbml0KCk7CgkJaW50IGFucyA9IDA7CgkJRk9SKGksMSxtMSttMikKCQkJaWYgKGVkZ2VzW2ldWzNdKQoJCQl7CgkJCQlhdXRvIFt1LHYsdyx0eXBlXSA9IGVkZ2VzW2ldOwoJCQkJaWYgKGRzdTIuam9pbih1LHYpKQoJCQkJCWFucyArPSBkc3UxLnRwbHQqdzsKCQkJfQoJCQllbHNlIAoJCQl7CgkJCQlhdXRvIFt1LHYsdyx0eXBlXSA9IGVkZ2VzW2ldOwoJCQkJaWYgKGRzdTEuam9pbih1LHYpKQoJCQkJCWFucyArPSBkc3UyLnRwbHQqdzsKCQkJfQoJCWNvdXQgPDwgYW5zOwoJfQoKfQoKYm9vbCBNMjsKc2lnbmVkIG1haW4oKQp7CiAgICBmYXN0OwogICAgaWYgKGZvcGVuKG5hbWUiLmlucCIsInIiKSkKICAgIHsKICAgIAlmcmVvcGVuKG5hbWUiLmlucCIsInIiLHN0ZGluKTsKICAgIAlmcmVvcGVuKG5hbWUiLm91dCIsInciLHN0ZG91dCk7CiAgICB9CiAgICBjaW4gPj4gbjEgPj4gbTE7CiAgICBGT1IoaSwxLG0xKQogICAgewogICAgCWludCB1LHYsdzsKICAgIAljaW4gPj4gdSA+PiB2ID4+IHc7CiAgICAJZWRnZTFbaV0gPSB7dSx2LHd9OwogICAgfQogICAgY2luID4+IG4yID4+IG0yOwogICAgRk9SKGksMSxtMikKICAgIHsKICAgIAlpbnQgdSx2LHc7CiAgICAJY2luID4+IHUgPj4gdiA+PiB3OwogICAgCWVkZ2UyW2ldID0ge3Usdix3fTsKICAgIH0KICAgIC8vIGlmIChzdWIxOjphcHByb3ZlZCgpKSByZXR1cm4gc3ViMTo6c29sdmUoKSwgdGltZSgpLCBtZW1vcnkoKSwgMDsKICAgIHN1YjI6OnNvbHZlKCk7CiAgICB0aW1lKCk7CiAgICBtZW1vcnkoKTsKICAgIHJldHVybiAwOwp9Ci8vIOKWiOKWiOKWkSDilojiloggIOKWiCAgICDilojiloggIOKWiOKWiOKWiOKWhCAgICDiloggICDiloTilojilojilojilogKLy/ilpPilojilojilpEg4paI4paI4paSIOKWiOKWiCAg4paT4paI4paI4paSIOKWiOKWiCDiloDiloggICDiloggIOKWiOKWiOKWkiDiloDilojilpIKLy/ilpLilojilojiloDiloDilojilojilpHilpPilojiloggIOKWkuKWiOKWiOKWkeKWk+KWiOKWiCAg4paA4paIIOKWiOKWiOKWkuKWkuKWiOKWiOKWkeKWhOKWhOKWhOKWkQovL+KWkeKWk+KWiCDilpHilojilogg4paT4paT4paIICDilpHilojilojilpHilpPilojilojilpIgIOKWkOKWjOKWiOKWiOKWkuKWkeKWk+KWiCAg4paI4paI4paTCi8v4paR4paT4paI4paS4paR4paI4paI4paT4paS4paS4paI4paI4paI4paI4paI4paTIOKWkuKWiOKWiOKWkSAgIOKWk+KWiOKWiOKWkeKWkeKWkuKWk+KWiOKWiOKWiOKWgOKWkgovLyDilpIg4paR4paR4paS4paR4paS4paR4paS4paT4paSIOKWkiDilpIg4paRIOKWkuKWkSAgIOKWkiDilpIgIOKWkeKWkiAgIOKWkgovLyDilpIg4paR4paS4paRIOKWkeKWkeKWkeKWkuKWkSDilpEg4paRIOKWkSDilpHilpEgICDilpEg4paS4paRICDilpEgICDilpEKLy8g4paRICDilpHilpEg4paRIOKWkeKWkeKWkSDilpEg4paRICAgIOKWkSAgIOKWkSDilpEg4paRIOKWkSAgIOKWkQovLyDilpEgIOKWkSAg4paRICAg4paRICAgICAgICAgICAgICDilpEgICAgICAg4paR