Cod sursa(job #2787657)

Utilizator marcumihaiMarcu Mihai marcumihai Data 23 octombrie 2021 20:12:21
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("disjoint.in");
ofstream g ("disjoint.out");

int parinte[100005];
int n,q;
void unire(int x, int y)
{
    parinte[y]=x;
}


int Find(int x)
{
    int par=x;
    int aux;
    while(par!=0)
    {
        aux=par;
        par=parinte[par];

    }
    par=x;
    int aux2;
    while(par!=0)
    {
        aux2=par;
        par=parinte[par];
        if(par!=aux)
        parinte[par]=aux;

    }
    return aux;
}




int main()
{
    f>>n>>q;

    for(int query=1; query<=q; ++query)
    {

        int tip;
        f>>tip;

        if(tip==1)
        {
            int x ;
            int y;
            f>>x>>y;
            unire(x, y);
        }
        if (tip==2)
        {
            int x, y;
            f>>x>>y;
            int tata1=Find(x);
            int tata2=Find(y);
            if(tata1==tata2)
            {
                 g<<"DA"<<"\n";

            }

            else
                g<<"NU"<<"\n";

        }
    }
    return 0;
}