Cod sursa(job #2939339)

Utilizator vlanderovlad rosu vlandero Data 13 noiembrie 2022 15:51:44
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include <vector>
#include <utility>
#include <queue>
#include <algorithm>

using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

vector<int> tt;
vector<int> rang;

int root(int n1)
{
    while(tt[n1] != n1)
    {
        n1 = tt[n1];
    }
    return n1;
}

void un(int n1, int n2)
{
    int r1 = root(n1);
    int r2 = root(n2);
    if(rang[r1]>rang[r2])
    {
        tt[r2] = r1;
    }
    else if(rang[r1]<rang[r2])
    {
        tt[r1]=r2;
    }
    else
    {
        rang[r1]++;
        tt[r2]=r1;
    }
}

int main()
{
    int n,m,x,y,z,i;
    cin>>n>>m;
    rang.resize(n+1,1);
    for(i=0; i<=4; ++i)
    {
        tt.push_back(i);
    }

    while(m--)
    {
        cin>>x>>y>>z;
        if(x == 1)
        {
            un(y,z);
        }
        else
        {
            if(root(y) == root(z))
                cout<<"DA\n";
            else cout<<"NU\n";
        }
    }
    return 0;
}