Cod sursa(job #2842304)

Utilizator TiberiwTiberiu Amarie Tiberiw Data 31 ianuarie 2022 15:44:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <bits/stdc++.h>
#define Dmax 100005
using namespace std;

ifstream f("disjoint.in");
ofstream g("disjoint.out");
int T[Dmax],R[Dmax];
int Root(int k)
{
    if(T[k]!=k)
    {
        T[k] = Root(T[k]);
        return T[k];
    }
    else
        return k;



}

void Update(int x,int y)
{
    if(Root(x)==Root(y))
        g<<"DA\n";
    else
        g<<"NU\n";


}
void Union(int x,int y)
{
    int rx = Root(x),ry = Root(y);
    if(rx!=ry)
    {
        if(R[rx] > R[ry])
            T[ry] = rx;
        else
        {
            T[rx] = ry;
            if(R[rx]==R[ry])
                R[ry]++;
        }
    }
}

int main()
{
    int n,m;
    f>>n>>m;
    for(int i = 1; i <= n; i++)
        T[i]=i;

    for(int i = 1; i <= m; i++)
    {
        int p,x,y;
        f>>p>>x>>y;
        if(p==1)
            Union(x,y);
        if(p==2)
            Update(x,y);
    }

    return 0;
}