Help me in solving Cutting a graph Problem https://codeforces.com/edu/course/2/lesson/7/1/practice/c

HI guys! I need your help!
Basically I got WA in test 3 ;-; in this codeforces edu problem
(it is practice 1-problem D)

here what i tried

#include <bits/stdc++.h>
using namespace std;
const int maxn=5e4+1;
const int maxk=150001;
int par[maxn];
int root(int v){return par[v]<0?v:par[v]=root(par[v]);}
void marge(int x,int y){
    if((x=root(x))==(y=root(y))) return;
    if(par[x]<par[y]) swap(x,y);
    par[x]+=par[y];
    par[y]=x;
}
bool ask(int x,int y){
    return (root(x)==root(y))?true:false;
}
int n,mi,q,u,v;
map<pair<int,int>,bool>m;

struct{
    string t;
    int u,v;
}QueryData[maxk];
main(){
    cin.tie(0)->sync_with_stdio(0);
    memset(par,-1,sizeof(par));
    cin>>n>>mi>>q;
    for(int i=0;i<n;i++){
        cin>>u>>v;
        m[make_pair(u,v)]=true;
        m[make_pair(v,u)]=true;
    }
    string type;
    for(int i=1;i<=q;i++){
        cin>>type>>u>>v;
        if(type=="cut"){
            m[make_pair(u,v)]=false;
            m[make_pair(v,u)]=false;
            QueryData[i].t=type;
            QueryData[i].u=u;
            QueryData[i].v=v;
        }else{
            QueryData[i].t=type;
            QueryData[i].u=u;
            QueryData[i].v=v;
        }
    }

    //build dsu//
    
    for(auto x: m){
        pair<int,int> key=x.first;
        int value=x.second;
        if(value){
            marge(key.first,key.second);
        }
    }
    //query//
    vector<string> res;;
    for(int i=q;i>=1;i--){
        string type=QueryData[i].t;
        int u=QueryData[i].u, v=QueryData[i].v;
        if(type=="cut"){ //cut = connect
            marge(u,v);
        }else if(type=="ask"){
            res.push_back((ask(u,v)?"YES":"NO"));
        }
    }
    for(int i=res.size()-1;i>=0;i--){
        cout<<res[i]<<"\n";
    }
}