Cod sursa(job #2671097)

Utilizator AlexutAlex Calinescu Alexut Data 11 noiembrie 2020 14:36:57
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
using namespace std;

int v[100005];
int h[100005];
int rad(int x)
{
    int tata=x;
    while(v[tata]!=0)
    {
        tata=v[tata];
    }
    int aux=x;
    while(v[aux]!=0)
    {
        int aux2=v[aux];
        v[aux]=tata;
        aux=aux2;
    }
    return tata;
}
void upd(int x, int y)
{
    if(h[x]==h[y])
        h[x]++;

    if(h[x]>h[y])
        v[y]=x;
    else
        v[x]=y;
}
int main()
{
    ifstream cin ("disjoint.in");
    ofstream cout ("disjoint.out");
    int n,i,j,k,m;
    cin>>n>>m;
    for(i=1; i<=m; i++)
    {
        int t;
        cin>>t;
        int x,y;
        cin>>x>>y;
        if(t==1)
        {
            upd(rad(x),rad(y));
        }
        else
        {
            if(rad(x)==rad(y))
                cout<<"DA\n";
            else
                cout<<"NU\n";
        }
    }
    return 0;
}