Cod sursa(job #2816482)

Utilizator elenacurecheriuElena Curecheriu elenacurecheriu Data 11 decembrie 2021 14:08:36
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,m,x,y,c;
int parinte[100001], marime[100001]={1};

int parent (int x)
{
    if (x == parinte[x])
        return x;
    return (parinte[x] = parent(parinte[x]));
}

void unite (int x, int y)
{
    x = parent(x);
    y = parent(y);
    if (marime[y] > marime[x])
    {
        parinte[x] = y;
        marime[y] += marime[x];
        // size[x] = size[y];
    }
    else
    {
        parinte[y] = x;
        marime[x] += marime[y];
        // size[y] = size[x];
    }
}

bool findd (int x, int y)
{
    x = parent(x);
    y = parent(y);
    return x == y;
}
int main()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
        parinte[i]=i;
    while(m)
    {
        fin>>c>>x>>y;
        if(c==1)
            unite(x,y);
        else
        {
            if(findd(x,y))
                fout<<"DA"<<'\n';
            else
                fout<<"NU"<<'\n';
        }
        m--;
    }
    return 0;
}