Cod sursa(job #2809518)

Utilizator luciabianca2405Tudorache Lucia Bianca luciabianca2405 Data 27 noiembrie 2021 10:07:10
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <iostream>
#define dmax 1000000
using namespace std;
ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int n,m,t[dmax+1],rang[dmax+1];
int radacina(int k)
{
    int x=k,tata;
    while(t[k]!=k)
        k=t[k];
    while(x!=k)
        tata=t[x],t[x]=k,x=tata;
    return k;
}
void unire(int x,int y)
{
    t[y]=x;
    rang[x]+=rang[y];
}
int main()
{
    int rx,ry,x,y,p,pr;
    cin>>n>>m;
    for(int i=1; i<=n; i++)
        t[i]=i;
    for(int i=1; i<=n; i++)
        rang[i]=1;
    for(int i=1; i<=m; i++)
    {
        cin>>p;
        if(p==1)
        {
            cin>>x>>y;
            if(x>y)
                swap(x,y);
            rx=radacina(x),ry=radacina(y);
            if(rx!=ry)
                unire(rx,ry);
        }
        else
        {
            cin>>x>>y;
            if(radacina(x)==radacina(y))
                cout<<"DA"<<'\n';
            else
                cout<<"NU"<<'\n';
        }
    }
}