Cod sursa(job #3192424)

Utilizator PetruApostolApostol Mihnea Petru PetruApostol Data 12 ianuarie 2024 16:02:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

int sef[100001];
int mar[100001];

int finddaddy(int a){
    if(sef[a]==a)
        return a;
    else{
        sef[a]=finddaddy(sef[a]);
        return sef[a];
    }
}

int main()
{
    int n,m,cer,i,a,b;
    cin>>n>>m;
    for(i=1;i<=n;i++){
        sef[i]=i;mar[i]=1;
    }
    for(i=0;i<m;i++){
        cin>>cer>>a>>b;
        if(cer==1){
            a=finddaddy(a);b=finddaddy(b);
            if(mar[a]<mar[b]){
                mar[b]+=mar[a];
                sef[a]=sef[b];
            }else{
                mar[a]+=mar[b];
                sef[b]=sef[a];
            }
        }else{
            if(finddaddy(a)==finddaddy(b))
                cout<<"DA\n";
            else
                cout<<"NU\n";
        }
    }
    return 0;
}