Cod sursa(job #2199404)

Utilizator DovlecelBostan Andrei Dovlecel Data 27 aprilie 2018 16:04:53
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>

using namespace std;
const int N=100001;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int n,m,t[N],nr[N];
int radacina(int x)
{
    if(t[x]==0)
        return x;
    else
    {
        t[x]=radacina(t[x]);
        return t[x];
    }
}
void reuniune (int x,int y)
{
    int rx=radacina(x);
    int ry=radacina(y);
    if(nr[rx]<nr[ry])
    {
        t[rx]=ry;
        nr[ry]+=nr[rx];
    }
    else
    {
        t[ry]=rx;
        nr[rx]+=nr[ry];
    }
}
bool aceeasi(int x,int y)
{
    return(radacina(x)==radacina(y));
}
int main()
{
    int a,b,c;
    in>>n>>m;
    for(int i=1;i<=m;i++)
    {
        in>>c>>a>>b;
        if(c==1)
            reuniune(a,b);
        else if(aceeasi(a,b))
            out<<"DA";
        else
            out<<"NU";
    }
    return 0;
}