Cod sursa(job #2422966)

Utilizator andreixxiLungu Andrei andreixxi Data 20 mai 2019 15:05:23
Problema Paduri de multimi disjuncte Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int t[100000], n, m;
int root (int k)
{
    if (t[k] == k)
        return k;
    int answer = root(t[k]);
    t[k] = answer;
    return answer;
}
void unire (int k, int p)
{
    int rk = root(k), rp = root(p);
    if(rk != rp)
        t[rk] = rp;
}
int main ()
{
    f>>n; //nr multimi
    for(int i=1; i<=n; i++)
        t[i] = i;
    f>>m; //nr operatii efectuate
    for(int i=1; i<=m; i++)
    {
        int cod, x, y; //tipul operatiei + 2 nr in [1,n]
        f>>cod>>x>>y;
        if(cod == 1)
            unire(x, y);
        else if (cod == 2)
        {
            if(root(x) != root(y)) //se afla in aceeasi multime
                g<<"NU\n";
            else
                g<<"DA\n";
        }
    }
}