Untitled

 avatar
unknown
plain_text
a year ago
924 B
6
Indexable
vector<int> par,sz;

int find(int a)
{
    if(par[a]==a)
        return a;
    return par[a]=find(par[a]);
}
void unite(int a,int b)
{
    a=find(a);
    b=find(b);
    if(a==b)
        return;
    if(sz[a]>sz[b])
        swap(a,b);
    par[a]=b;
    sz[b]+=sz[a];
}

vector<int> fn(int n,vector<string> &qt,vector<int> &st1,vector<int> &st2)
{
    par.clear();
    sz.clear();
    par.resize(n+1);
    sz.resize(n+1,1);
    for(int i=1;i<=n;i++)
        par[i]=i;
    vector<int> ans;
    int k=qt.size();
    for(int i=0;i<k;i++)
    {
        if(qt[i]=="Friend")
        {
            // cout<<"friend"<<endl;
            unite(st1[i],st2[i]);
        }
        else 
        {
            // cout<<"total"<<" "<<find(st1[i])<<" "<<sz[find(st1[i])]<<" "<<find(st2[i])<<" "<<sz[find(st2[i])]<<endl;
            int temp =sz[find(st1[i])]+sz[find(st2[i])];
            ans.push_back(temp);
        }
    }
    return ans;
}
Editor is loading...
Leave a Comment