#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
void dfs(int src, vector<vector<int>> &graph, vector<int> &vis, vector<int> &comp_id, int comp) {
vis[src] = 1;
comp_id[src] = comp;
for (auto &nbr : graph[src]) {
if (!vis[nbr]) {
dfs(nbr, graph, vis, comp_id, comp);
}
}
}
void dfs1(int src, vector<vector<int>> &graph, vector<int> &vis) {
vis[src] = 1;
for (auto &nbr : graph[src]) {
if (!vis[nbr]) {
dfs1(nbr, graph, vis);
}
}
}
int main() {
int t;
cin >> t;
while (t--) {
int n, m1, m2;
cin >> n >> m1 >> m2;
vector<vector<int>> graphF(n + 1);
vector<vector<int>> graphG(n + 1);
vector<pair<int, int>> fEdges;
// Read Graph F
for (int i = 0; i < m1; ++i) {
int u, v;
cin >> u >> v;
fEdges.push_back({u, v});
}
// Read Graph G
for (int i = 0; i < m2; ++i) {
int u, v;
cin >> u >> v;
graphG[u].push_back(v);
graphG[v].push_back(u);
}
// Compute component IDs for graph G
vector<int> comp_id(n + 1, 0);
vector<int> vis(n + 1, 0);
int comp = 1;
for (int i = 1; i <= n; ++i) {
if (!vis[i]) {
dfs(i, graphG, vis, comp_id, comp);
comp++;
}
}
int count = 0;
// Add only valid edges from F (within same G-component)
for (auto &[u, v] : fEdges) {
if (comp_id[u] == comp_id[v]) {
graphF[u].push_back(v);
graphF[v].push_back(u);
} else {
count++; // Bad edge
}
}
// For each G component, count number of F components
unordered_map<int, int> componentFreq;
vector<int> vis1(n + 1, 0);
for (int i = 1; i <= n; ++i) {
if (!vis1[i]) {
dfs1(i, graphF, vis1);
componentFreq[comp_id[i]]++;
}
}
// Add (freq - 1) for each disconnected part inside same G-component
for (auto &[cid, freq] : componentFreq) {
count += (freq - 1);
}
cout << count << "\n";
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgZGZzKGludCBzcmMsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJmdyYXBoLCB2ZWN0b3I8aW50PiAmdmlzLCB2ZWN0b3I8aW50PiAmY29tcF9pZCwgaW50IGNvbXApIHsKICAgIHZpc1tzcmNdID0gMTsKICAgIGNvbXBfaWRbc3JjXSA9IGNvbXA7CiAgICBmb3IgKGF1dG8gJm5iciA6IGdyYXBoW3NyY10pIHsKICAgICAgICBpZiAoIXZpc1tuYnJdKSB7CiAgICAgICAgICAgIGRmcyhuYnIsIGdyYXBoLCB2aXMsIGNvbXBfaWQsIGNvbXApOwogICAgICAgIH0KICAgIH0KfQoKdm9pZCBkZnMxKGludCBzcmMsIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gJmdyYXBoLCB2ZWN0b3I8aW50PiAmdmlzKSB7CiAgICB2aXNbc3JjXSA9IDE7CiAgICBmb3IgKGF1dG8gJm5iciA6IGdyYXBoW3NyY10pIHsKICAgICAgICBpZiAoIXZpc1tuYnJdKSB7CiAgICAgICAgICAgIGRmczEobmJyLCBncmFwaCwgdmlzKTsKICAgICAgICB9CiAgICB9Cn0KCmludCBtYWluKCkgewogICAgaW50IHQ7CiAgICBjaW4gPj4gdDsKCiAgICB3aGlsZSAodC0tKSB7CiAgICAgICAgaW50IG4sIG0xLCBtMjsKICAgICAgICBjaW4gPj4gbiA+PiBtMSA+PiBtMjsKCiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiBncmFwaEYobiArIDEpOwogICAgICAgIHZlY3Rvcjx2ZWN0b3I8aW50Pj4gZ3JhcGhHKG4gKyAxKTsKICAgICAgICB2ZWN0b3I8cGFpcjxpbnQsIGludD4+IGZFZGdlczsKCiAgICAgICAgLy8gUmVhZCBHcmFwaCBGCiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtMTsgKytpKSB7CiAgICAgICAgICAgIGludCB1LCB2OwogICAgICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgICAgICBmRWRnZXMucHVzaF9iYWNrKHt1LCB2fSk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZWFkIEdyYXBoIEcKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG0yOyArK2kpIHsKICAgICAgICAgICAgaW50IHUsIHY7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIGdyYXBoR1t1XS5wdXNoX2JhY2sodik7CiAgICAgICAgICAgIGdyYXBoR1t2XS5wdXNoX2JhY2sodSk7CiAgICAgICAgfQoKICAgICAgICAvLyBDb21wdXRlIGNvbXBvbmVudCBJRHMgZm9yIGdyYXBoIEcKICAgICAgICB2ZWN0b3I8aW50PiBjb21wX2lkKG4gKyAxLCAwKTsKICAgICAgICB2ZWN0b3I8aW50PiB2aXMobiArIDEsIDApOwogICAgICAgIGludCBjb21wID0gMTsKICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyArK2kpIHsKICAgICAgICAgICAgaWYgKCF2aXNbaV0pIHsKICAgICAgICAgICAgICAgIGRmcyhpLCBncmFwaEcsIHZpcywgY29tcF9pZCwgY29tcCk7CiAgICAgICAgICAgICAgICBjb21wKys7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGludCBjb3VudCA9IDA7CgogICAgICAgIC8vIEFkZCBvbmx5IHZhbGlkIGVkZ2VzIGZyb20gRiAod2l0aGluIHNhbWUgRy1jb21wb25lbnQpCiAgICAgICAgZm9yIChhdXRvICZbdSwgdl0gOiBmRWRnZXMpIHsKICAgICAgICAgICAgaWYgKGNvbXBfaWRbdV0gPT0gY29tcF9pZFt2XSkgewogICAgICAgICAgICAgICAgZ3JhcGhGW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICAgICAgICAgIGdyYXBoRlt2XS5wdXNoX2JhY2sodSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBjb3VudCsrOyAvLyBCYWQgZWRnZQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBGb3IgZWFjaCBHIGNvbXBvbmVudCwgY291bnQgbnVtYmVyIG9mIEYgY29tcG9uZW50cwogICAgICAgIHVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IGNvbXBvbmVudEZyZXE7CiAgICAgICAgdmVjdG9yPGludD4gdmlzMShuICsgMSwgMCk7CgogICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IG47ICsraSkgewogICAgICAgICAgICBpZiAoIXZpczFbaV0pIHsKICAgICAgICAgICAgICAgIGRmczEoaSwgZ3JhcGhGLCB2aXMxKTsKICAgICAgICAgICAgICAgIGNvbXBvbmVudEZyZXFbY29tcF9pZFtpXV0rKzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIChmcmVxIC0gMSkgZm9yIGVhY2ggZGlzY29ubmVjdGVkIHBhcnQgaW5zaWRlIHNhbWUgRy1jb21wb25lbnQKICAgICAgICBmb3IgKGF1dG8gJltjaWQsIGZyZXFdIDogY29tcG9uZW50RnJlcSkgewogICAgICAgICAgICBjb3VudCArPSAoZnJlcSAtIDEpOwogICAgICAgIH0KCiAgICAgICAgY291dCA8PCBjb3VudCA8PCAiXG4iOwogICAgfQoKICAgIHJldHVybiAwOwp9Cg==