Cod sursa(job #3207104)

Utilizator AndreiMargaritMargarit Andrei AndreiMargarit Data 25 februarie 2024 10:57:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int n,m,i,j,t[100005],r[100005];

int radacina(int x)
{
    int x1,aux,root;
    x1=x;
    while(x!=t[x])
    {
        x=t[x];
    }
    root=x;
    x=x1;
    while(x!=t[x])
    {
        aux=x;
        x=t[x];
        t[aux]=root;
    }
    return root;
}

void join(int x,int y)
{
    x=radacina(x);
    y=radacina(y);
    if(r[x]>=r[y])
    {
        t[y]=t[x];
        r[x]++;
    }
    else
    {
        t[x]=t[y];
        r[y]++;
    }
}

int main()
{int operatie,x,y;
    f>>n>>m;
    for(i=1;i<=n;i++)
    {
        r[i]=1;
        t[i]=i;
    }
    for(i=1;i<=m;i++)
    {
        f>>operatie>>x>>y;
        if(operatie==1)
        {
            x=radacina(x);
            y=radacina(y);
            if(x!=y)
            {
                join(x,y);
            }
        }
        else
        {
            x=radacina(x);
            y=radacina(y);
            if(x==y)
            {
                g<<"DA"<<'\n';
            }
            else
            {
                g<<"NU"<<'\n';
            }
        }
    }
    return 0;
}