Cod sursa(job #1697544)

Utilizator Mr.RobotElliot Alderson Mr.Robot Data 2 mai 2016 13:50:53
Problema Paduri de multimi disjuncte Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");

int t[100002], h[100002], n, m, x, y, cod;

int padre( int k )
{
    if( t[k] == k )
        return k;
    else
        return k = padre(t[k]);
}

void impreunare( int k, int l )

{
    int x = padre(k);
    int y = padre(l);

    if( h[x] < h[y] )
    {
        t[k] = y;
    }
    else if( h[x] > h[y] )
    {
        t[l] = x;
    }
    else
    {
        t[k] = y;
        h[y]++;
    }
}

int main()
{
    f >> n >> m;

    for( int i=1; i<=n; i++ )
        t[i] = i;

    for( int i=1; i<=m; i++ )
    {
        f >> cod >> x >> y;

        if( cod == 2 )
        {
            if( padre(x) == padre(y) )
                g << "DA\n";
            else
                g << "NU\n";
        }
        else
        {
            impreunare(x,y);
        }
    }


    return 0;
}