Cod sursa(job #3124031)

Utilizator Mihai_AritonMihai Ariton Mihai_Ariton Data 26 aprilie 2023 18:14:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <bits/stdc++.h>
using namespace std;

int t[100005], h[100005];
int radacina(int x)
{
    if(t[x]==x)
    return x;
    return radacina(t[x]);
}
void reuniune(int x, int y)
{
    int rx, ry;
    rx=radacina(x);
    ry=radacina(y);
    if(h[rx]<h[ry])
    t[rx]=ry;
    else if(h[rx]>h[ry])
    t[ry]=rx;
    else
    {
        t[ry]=rx;
        h[rx]++;
    }
}
int main()
{
    ifstream cin("disjoint.in");
    ofstream cout("disjoint.out");
    
    int n, m, x, y, tip;
    cin>>n>>m;
    for(int i=1; i<=n; i++)
    t[i]=i;
    for(int i=1; i<=m; i++)
    {
        cin>>tip>>x>>y;
        if(tip==1)
        {
            reuniune(x, y);
        }
        else
        {
            if(radacina(x)==radacina(y))
            cout<<"DA\n";
            else
            cout<<"NU\n";
        }
    }

    return 0;
}