Cod sursa(job #2423455)

Utilizator teodor.dumitrescuDumitrescu Teodor teodor.dumitrescu Data 21 mai 2019 13:45:12
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb

#include <iostream>
#include <fstream>

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