rt,过了
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 5;
int n, m, q, fa[N];
set<int> s[N], t[N];
int find(int x) {
return fa[x] == x ? x : fa[x] = find(fa[x]);
}
void merge(int x, int y) {
y = find(y), x = find(x);
if(s[x].size() < s[y].size()) {
fa[x] = y;
for(int i : s[x]) s[y].insert(i);
for(int i : t[x]) t[y].insert(i);
}
else {
fa[y] = x;
for(int i : s[y]) s[x].insert(i);
for(int i : t[y]) t[x].insert(i);
}
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cin >> n >> m >> q;
for(int i = 1; i <= n * 2; i++) fa[i] = i, t[i].insert(i);
for(int i = 1, u, v; i <= m; i++) {
cin >> u >> v;
s[u].insert(v);
s[v].insert(u);
}
while(q--) {
int u, v; cin >> u >> v;
u = find(u), v = find(v);
bool f = 0;
if(t[u].size() <= t[v].size()) {
for(int i : t[u])
if(s[v].find(i) != s[v].end())
f = 1;
}
if(t[v].size() <= t[u].size()) {
for(int i : t[v])
if(s[u].find(i) != s[u].end())
f = 1;
}
if(s[u].size() <= s[v].size()) {
for(int i : s[u])
if(t[v].find(i) != t[v].end())
f = 1;
}
if(s[v].size() <= s[u].size()) {
for(int i : s[v])
if(t[u].find(i) != t[u].end())
f = 1;
}
if(!f) cout << "APPROVE" << endl, merge(u, v);
else cout << "REFUSE" << endl;
}
return 0;
}