Cod sursa(job #2451761)

Utilizator danhHarangus Dan danh Data 28 august 2019 00:49:53
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int NMAX = 100005;

int T[NMAX];
int R[NMAX];

int ROOT(int x)
{
    int r;
    for(r=x; r!=T[r]; r=T[r]);

    int y;
    while(x != T[x])
    {
        y = T[x];
        T[x] = r;
        x = y;
    }

}

int UNITE(int x, int y)
{
    if(R[x] > R[y])
    {
        T[y] = x;
    }
    else
    {
        T[x] = y;
    }
}

int main()
{
    int n, m, i, cod, x, y;

    fin>>n>>m;

    for(i=1; i<=n; i++)
    {
        T[i] = i;
        R[i] = 1;
    }

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

        if(cod == 1)
        {
            if(ROOT(x) != ROOT(y))
            {
                UNITE(ROOT(x), ROOT(y));
            }
            else
            {
                if(ROOT(x) == ROOT(y))
                {
                    fout<<"DA\n";
                }
                else
                {
                    fout<<"NU\n";
                }
            }
        }
    }

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