Cod sursa(job #918358)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 18 martie 2013 20:24:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

using namespace std;

//ifstream fin("f.in"); ofstream fout("f.out");
ifstream fin("disjoint.in"); ofstream fout("disjoint.out");

int n, m, tip, T[100001], i, j, H[100001];

int Tata(int nod)
{
    while(T[nod])
        nod = T[nod];

    return nod;
}

void Add(int i, int j)
{
    int v1 = Tata(i), v2 = Tata(j);


    if(H[v1] == H[v2])
    {
        T[v1] = v2;
        H[v2]++;
    }
    else
    {
        if(H[v1] < H[v2])
            T[v1] = v2;
        else
            T[v2] = v1;
    }

}

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

    for(; m; m--)
    {
        fin >> tip >> i >> j;

        if(tip == 1)
            Add(i, j);
        if(tip == 2)
        {
            if(Tata(i) == Tata(j))
                fout << "DA\n";
            else
                fout << "NU\n";
        }

    }
    fin.close(); fout.close();
    return 0;
}