Cod sursa(job #3201724)

Utilizator VespaOlaru Amelia Vespa Data 9 februarie 2024 17:41:03
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <vector>
#include <iostream>
#include <fstream>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
vector<int>T,rang;
int N,M;

int radacina(int x)
{
    if(T[x]==0)
        return x;
    //return radacina(T[x]);
    else
    {
        int k=radacina(T[x]);
        T[x]=k;
        return k;
    }
}

void unite(int a,int b)
{
    int x=radacina(a),y=radacina(b);
    if(x!=y)
    {
        if(rang[a]<rang[b])
        {
            T[a]=b;
        }
        else
        {
            if(rang[a]==rang[b])
                rang[a]++;
            T[a]=b;
        }
    }
}

int main()
{
    fin>>N>>M;
    T=rang=vector<int>(N+1,0);
    for(int i=0;i<M;i++)
    {
        int x,y,c;fin>>c>>x>>y;
        if(c==1)
        {
            unite(radacina(x),radacina(y));
        }
        else
        {
            if(radacina(x)==radacina(y))
                fout<<"DA"<<'\n';
            else
                fout<<"NU"<<'\n';
        }
    }
    return 0;
}