Cod sursa(job #2928081)

Utilizator PHOSSESSEDProsie Radu-Teodor PHOSSESSED Data 22 octombrie 2022 10:22:27
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include<iostream>
using namespace std;

const int NMAX = 1e5 + 1;

int t[NMAX];//t[i] = tatal lui i,daca t[i] = 0,i e fatherless

void unite(int a,int b)
{
    int root = b;
    while(t[root])
        {
            root = t[root];
        }

    t[root] = a;
}

bool find(int a,int b)
{
    int ra = a,rb = b;
    while(t[ra]) ra = t[ra];
    while(t[rb]) rb = t[rb];

    return (ra == rb);
}

int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);

    int n,q,a,b,t;
    cin >> n >> q;

    while(q--)
        {
            cin >> t >> a >> b;
            if(t & 1)
                {
                    unite(a,b);
                }
            else
                {
                    if(find(a,b))
                        {
                            cout << "DA\n";
                        }
                    else
                        {
                            cout << "NU\n";
                        }
                }
        }

}