Cod sursa(job #2423664)

Utilizator teodor.dumitrescuDumitrescu Teodor teodor.dumitrescu Data 21 mai 2019 20:19:38
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>

using namespace std;

int tata[100005],rang[100005];
int find_father(int nod)
{
    if(nod==tata[nod])
        return nod;
    int x=find_father(tata[nod]);
    tata[nod]=x;
    return x;
}
void unite(int x, int y)
{
    if(rang[x]>rang[y])
        tata[y]=x;
    if(rang[y]>=rang[x])
        tata[x]=y;
    if(rang[y]==rang[x])
        rang[y]++;
}
int main()
{
    ifstream in("disjoint.in");
    ofstream out("disjoint.out");
    int x,y,tx,ty,cod,i,N,M;
    in>>N>>M;
    for(i=1;i<=N;i++)
    {
        rang[i]=1;
        tata[i]=i;
    }
    for(i=1;i<=M;i++)
    {
        in>>cod>>x>>y;
        tx=find_father(x);
        ty=find_father(y);
        if(cod==1)
        {
            unite(tx,ty);
        }
        if(cod==2)
        {
            if(tx==ty)
                out<<"DA"<<"\n";
            else
                out<<"NU"<<"\n";
        }
    }
    return 0;
}