#include <bits/stdc++.h>
#define debug cout << "ok\n";
#define SQR(x) (1LL * ((x) * (x)))
#define MASK(i) (1LL << (i))
#define BIT(x, i) (((x) >> (i)) & 1)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pli pair<ll, int>
#define vi vector<int>
#define vll vector<ll>
#define FAST ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef unsigned int ui;
using namespace std;
const int M = 1e9 + 7;
const int INF = 1e9 + 7;
const ll INFLL = (ll)2e18 + 7LL;
const ld PI = acos(-1);
const int dx[] = {1, -1, 0, 0, -1, 1, 1, -1};
const int dy[] = {0, 0, 1, -1, -1, -1, 1, 1};
template<class _, class __>
bool minimize(_ &x, const __ y){
if(x > y){
x = y;
return true;
} else return false;
}
template<class _, class __>
bool maximize(_ &x, const __ y){
if(x < y){
x = y;
return true;
} else return false;
}
//--------------------------------------------------------------
const int MaxN = 1e6+7;
int n1,m1,n2,m2;
ll res = 0;
struct Edges {
int u;
int v;
int w;
bool side;
} edge[MaxN];
bool cmp(Edges a,Edges b) {
return a.w < b.w;
}
struct DSU {
vi lab;
int n,tplt;
DSU(int _n) {
n = _n;
lab.assign(_n+1,-1);
tplt = n;
}
int GR(int u) {
return lab[u] < 0 ? u : lab[u] = GR(lab[u]);
}
bool add_edges(Edges _edge) {
int r1 = GR(_edge.u);
int r2 = GR(_edge.v);
if (r1 == r2) return false;
if (lab[r1] < lab[r2]) {
lab[r1] += lab[r2];
lab[r2] = r1;
}
else {
lab[r2] += lab[r1];
lab[r1] = r2;
}
tplt--;
return true;
}
};
void sol() {
cin >> n1 >> m1;
for (int i=1;i<=m1;i++) {
int u,v,w;
cin >> u >> v >> w;
edge[i] = (Edges){u,v,w,0};
}
cin >> n2 >> m2;
for (int i=1;i<=m2;i++) {
int u,v,w;
cin >> u >> v >> w;
edge[i+m1] = (Edges){u,v,w,1};
}
sort(edge+1,edge+m1+m2+1,cmp);
DSU dsu1(n1);
DSU dsu2(n2);
for (int i=1;i<=m1+m2;i++) {
if (edge[i].side) {
if (dsu2.add_edges(edge[i])) {
res += 1LL*dsu1.tplt*edge[i].w;
}
}
else {
if (dsu1.add_edges(edge[i])) {
res += 1LL*dsu2.tplt*edge[i].w;
}
}
}
cout << res;
}
int main() {
// freopen("TWOGRAPH.inp","r",stdin);
// freopen("TWOGRAPH.out","w",stdout);
FAST
int t=1;
// cin >> t;
while (t--) sol();
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CgojZGVmaW5lIGRlYnVnICAgICBjb3V0IDw8ICJva1xuIjsKI2RlZmluZSBTUVIoeCkgICAgKDFMTCAqICgoeCkgKiAoeCkpKQojZGVmaW5lIE1BU0soaSkgICAoMUxMIDw8IChpKSkKI2RlZmluZSBCSVQoeCwgaSkgKCgoeCkgPj4gKGkpKSAmIDEpCiNkZWZpbmUgZmkgICAgICAgIGZpcnN0CiNkZWZpbmUgc2UgICAgICAgIHNlY29uZAojZGVmaW5lIHBiICAgICAgICBwdXNoX2JhY2sKCiNkZWZpbmUgbXAgbWFrZV9wYWlyCiNkZWZpbmUgcGlpIHBhaXI8aW50LCBpbnQ+CiNkZWZpbmUgcGxsIHBhaXI8bGwsIGxsPgojZGVmaW5lIHBsaSBwYWlyPGxsLCBpbnQ+CiNkZWZpbmUgdmkgdmVjdG9yPGludD4KI2RlZmluZSB2bGwgdmVjdG9yPGxsPgoKI2RlZmluZSBGQVNUIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpOwoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmNvbnN0IGludCBNID0gMWU5ICsgNzsKY29uc3QgaW50IElORiA9IDFlOSArIDc7CmNvbnN0IGxsIElORkxMID0gKGxsKTJlMTggKyA3TEw7CmNvbnN0IGxkIFBJID0gYWNvcygtMSk7Cgpjb25zdCBpbnQgZHhbXSA9IHsxLCAtMSwgMCwgMCwgLTEsIDEsIDEsIC0xfTsKY29uc3QgaW50IGR5W10gPSB7MCwgMCwgMSwgLTEsIC0xLCAtMSwgMSwgMX07Cgp0ZW1wbGF0ZTxjbGFzcyBfLCBjbGFzcyBfXz4KICAgIGJvb2wgbWluaW1pemUoXyAmeCwgY29uc3QgX18geSl7CiAgICAgICAgaWYoeCA+IHkpewogICAgICAgICAgICB4ID0geTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHJldHVybiBmYWxzZTsKICAgIH0KdGVtcGxhdGU8Y2xhc3MgXywgY2xhc3MgX18+CiAgICBib29sIG1heGltaXplKF8gJngsIGNvbnN0IF9fIHkpewogICAgICAgIGlmKHggPCB5KXsKICAgICAgICAgICAgeCA9IHk7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgICB9CgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjb25zdCBpbnQgTWF4TiA9IDFlNis3OwoKaW50IG4xLG0xLG4yLG0yOwpsbCByZXMgPSAwOwoKc3RydWN0IEVkZ2VzIHsKICAgIGludCB1OwogICAgaW50IHY7CiAgICBpbnQgdzsKICAgIGJvb2wgc2lkZTsKfSBlZGdlW01heE5dOwoKYm9vbCBjbXAoRWRnZXMgYSxFZGdlcyBiKSB7CiAgICByZXR1cm4gYS53IDwgYi53Owp9CgpzdHJ1Y3QgRFNVIHsKICAgIHZpIGxhYjsKICAgIGludCBuLHRwbHQ7CgogICAgRFNVKGludCBfbikgewogICAgICAgIG4gPSBfbjsKICAgICAgICBsYWIuYXNzaWduKF9uKzEsLTEpOwogICAgICAgIHRwbHQgPSBuOwogICAgfQoKICAgIGludCBHUihpbnQgdSkgewogICAgICAgIHJldHVybiBsYWJbdV0gPCAwID8gdSA6IGxhYlt1XSA9IEdSKGxhYlt1XSk7CiAgICB9CgogICAgYm9vbCBhZGRfZWRnZXMoRWRnZXMgX2VkZ2UpIHsKICAgICAgICBpbnQgcjEgPSBHUihfZWRnZS51KTsKICAgICAgICBpbnQgcjIgPSBHUihfZWRnZS52KTsKICAgICAgICBpZiAocjEgPT0gcjIpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAobGFiW3IxXSA8IGxhYltyMl0pIHsKICAgICAgICAgICAgbGFiW3IxXSArPSBsYWJbcjJdOwogICAgICAgICAgICBsYWJbcjJdID0gcjE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBsYWJbcjJdICs9IGxhYltyMV07CiAgICAgICAgICAgIGxhYltyMV0gPSByMjsKICAgICAgICB9CiAgICAgICAgdHBsdC0tOwogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9OwoKdm9pZCBzb2woKSB7CiAgICBjaW4gPj4gbjEgPj4gbTE7CiAgICBmb3IgKGludCBpPTE7aTw9bTE7aSsrKSB7CiAgICAgICAgaW50IHUsdix3OwogICAgICAgIGNpbiA+PiB1ID4+IHYgPj4gdzsKICAgICAgICBlZGdlW2ldID0gKEVkZ2VzKXt1LHYsdywwfTsKICAgIH0KICAgIGNpbiA+PiBuMiA+PiBtMjsKICAgIGZvciAoaW50IGk9MTtpPD1tMjtpKyspIHsKICAgICAgICBpbnQgdSx2LHc7CiAgICAgICAgY2luID4+IHUgPj4gdiA+PiB3OwogICAgICAgIGVkZ2VbaSttMV0gPSAoRWRnZXMpe3Usdix3LDF9OwogICAgfQogICAgc29ydChlZGdlKzEsZWRnZSttMSttMisxLGNtcCk7CiAgICBEU1UgZHN1MShuMSk7CiAgICBEU1UgZHN1MihuMik7CiAgICBmb3IgKGludCBpPTE7aTw9bTErbTI7aSsrKSB7CiAgICAgICAgaWYgKGVkZ2VbaV0uc2lkZSkgewogICAgICAgICAgICBpZiAoZHN1Mi5hZGRfZWRnZXMoZWRnZVtpXSkpIHsKICAgICAgICAgICAgICAgIHJlcyArPSAxTEwqZHN1MS50cGx0KmVkZ2VbaV0udzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaWYgKGRzdTEuYWRkX2VkZ2VzKGVkZ2VbaV0pKSB7CiAgICAgICAgICAgICAgICByZXMgKz0gMUxMKmRzdTIudHBsdCplZGdlW2ldLnc7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IHJlczsKfQoKaW50IG1haW4oKSB7Ci8vCWZyZW9wZW4oIlRXT0dSQVBILmlucCIsInIiLHN0ZGluKTsKLy8JZnJlb3BlbigiVFdPR1JBUEgub3V0IiwidyIsc3Rkb3V0KTsKCUZBU1QKCWludCB0PTE7Ci8vCWNpbiA+PiB0OwoJd2hpbGUgKHQtLSkgc29sKCk7Cn0K