Cod sursa(job #2566973)

Utilizator AlbertUngureanuAlbert AlbertUngureanu Data 3 martie 2020 14:15:07
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int N,M;
int T[100005],R[100005];

int parinte(int x)
{
    if(!T[x])
        return x;
    int P=parinte(T[x]);
    T[x]=P;
    return P;
}

void adaugare(int x, int y)
{
    int pX=parinte(x),pY=parinte(y);
    if(pX!=pY)
    {
        if(R[pX]>R[pY])
            T[pY]=pX;
        else
        {
            T[pX]=pY;
            if(R[pX]==R[pY])
                R[pY]++;
        }
    }
}

void verificare(int x,int y)
{
    if(parinte(x)==parinte(y))
        fout<<"DA"<<'\n';
    else
        fout<<"NU"<<'\n';
}

int main()
{
    int x,y,z;
    fin>>N>>M;
    for(int i=1;i<=M;i++)
    {
        fin>>x>>y>>z;
        if(x==1)
            adaugare(y,z);
        else
            verificare(y,z);
    }
    return 0;
}