Cod sursa(job #3263260)

Utilizator aeru1Ianos Alex-Marian aeru1 Data 14 decembrie 2024 09:32:38
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;

#define TITLE "disjoint"

ifstream f (TITLE".in");
ofstream g (TITLE".out");

int Father[100002];
int Rang[100002];

int Root(int Node)
{
    if(Father[Node]==Node)
        return Node;
    return Father[Node]=Root(Father[Node]);
}

void Union(int Node1, int Node2)
{
    int Rad1=Root(Node1),Rad2=Root(Node2);
    if(Rang[Rad1]>Rang[Rad2])
        Father[Rad2]=Rad1;
    else
        Father[Rad1]=Rad2;
    if(Rang[Rad1]==Rang[Rad2])
        Rang[Rad1]++;
}

int main()
{
    int n,m;
    f>>n>>m;
    for(int i=1; i<=n; i++)
    {
        Father[i]=i;
        Rang[i]=1;
    }
    while(m--)
    {
        int c,a,b;
        f>>c>>a>>b;
        if(c==1)
            Union(a,b);
        else if(Root(a)==Root(b))
            g<<"DA\n";
        else
            g<<"NU\n";
    }
    return 0;
}