Cod sursa(job #3218487)

Utilizator darabana.raresDarabana Rares Cristian darabana.rares Data 27 martie 2024 11:59:22
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#include <iostream>
#define NMAX 100005
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int tata[NMAX];
int h[NMAX];
void Union(int x, int y)
{
    if (h[x] < h[y])
    {
        tata[x] = y;
    }
    else if (h[y] < h[x])
        tata[y] = x;
    else
    {
        tata[y] = x;
        ++h[y];
    }
}

int Find(int x)
{
    if(tata[x] == 0)
    return x;
    tata[x] = Find(tata[x]);
    return tata[x]; 

}
int n,m;
int main()
{
    in>>n>>m;
    int x,y,cod;
    for(int i=1;i<=m;i++)
    {
        in>>cod>>x>>y;
        int resx = Find(x);
        int resy = Find(y);
        switch(cod)
        {
            case 1:
            {
                Union(resx,resy);
                break;
            }
            case 2:
            {
                if(resx == resy)
                out<<"DA\n";
                else
                out<<"NU\n";
                break;
            }
            default:
            break;
        }
    }
}