Cod sursa(job #2906312)

Utilizator mihnea.cazan15mihnea cazan mihnea.cazan15 Data 25 mai 2022 16:28:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <fstream>

using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int t[100005],h[100005];
int root(int x)
{
    if(t[x]==0)
       return x;
    t[x]=root(t[x]);
    return t[x];
}
void unite(int x,int y)
{
    int rx=root(x),ry=root(y);
    if(h[rx]<h[ry])
       t[rx]=ry,h[ry]+=h[rx];
    else
        t[ry]=rx,h[rx]+=h[ry];
}
bool query(int x,int y)
{
    int rx=root(x),ry=root(y);
    return(rx==ry);
}

int main()
{
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;i++)
        h[i]=1;
    while(q--)
    {
        int type,x,y;
        cin>>type>>x>>y;
        if(type==1)
           unite(x,y);
        else
            {
                if(query(x,y))
                   cout<<"DA\n";
                else
                    cout<<"NU\n";
            }
    }
    return 0;
}