Cod sursa(job #2418519)

Utilizator teodor.dumitrescuDumitrescu Teodor teodor.dumitrescu Data 5 mai 2019 12:57:03
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 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;
    return find_father(tata[x]);
    tata[x]=tata[tata[x]];
}
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;
    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;
        switch(cod)
        {
        case 1:
            {
                unite(find_father(x),find_father(y));
            }
            break;
        case 2:
            {
                if(find_father(x)==find_father(y))
                    g<<"DA"<<endl;
                else
                    g<<"NU"<<endl;
            }
            break;
        }
    }
    return 0;
}