Cod sursa(job #2733256)

Utilizator As932Stanciu Andreea As932 Data 30 martie 2021 10:18:50
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

const int nmax=100005;

int n,m;
int rang[nmax],p[nmax];

void init()
{
    for(int i=1;i<=n;i++)
    {
        rang[i]=1;
        p[i]=i;
    }
}

int root(int nr)
{
    if(nr!=p[nr])
        p[nr]=root(p[nr]);
    return p[nr];
}

void unionn(int a,int b)
{
    if(rang[a]>rang[b])
        p[b]=a;
    else
        p[a]=b;

    if(rang[a]==rang[b])
        rang[b]++;
}

int main()
{
    fin>>n>>m;

    init();

    for(int i=1;i<=m;i++)
    {
        int tip,x,y;

        fin>>tip>>x>>y;

        if(tip==1)
            unionn(root(x),root(y));
        else
        {
            if(root(x)==root(y))
                fout<<"DA\n";
            else
                fout<<"NU\n";
        }
    }


    return 0;
}