Cod sursa(job #2960917)

Utilizator stefan2806Radulescu Stefan stefan2806 Data 5 ianuarie 2023 12:28:35
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 n,m,t[100010],rg[100010],i,q,x,y;

int cautare(int nod)
{
    int r;
    r=nod;
    while(t[r]!=r)
        r=t[r];
    while(t[nod]!=nod)
    {
        nod=t[nod];
        t[nod]=r;
    }
    return r;
}

void unire(int x,int y)
{
    if(rg[x]>rg[y])
        t[y]=x;
    else
        t[x]=y;
    if(rg[x]==rg[y])
        rg[x]++;
}

int main()
{
    cin>>n>>m;
    for(i=1;i<=n;i++)
        t[i]=i,rg[i]=1;
    for(i=1;i<=m;i++)
    {
        cin>>q>>x>>y;
        if(q==1)
        {
            unire(cautare(x),cautare(y));
        }
        if(q==2)
        {
            if(cautare(x)==cautare(y))
                cout<<"DA\n";
            else
                cout<<"NU\n";
        }
    }
    return 0;
}