Cod sursa(job #2700991)

Utilizator RrimGeaperStoica Vlad-MIhail RrimGeaper Data 29 ianuarie 2021 15:33:58
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <cstdio>
using namespace std;

int sef[100001],n,m;

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

void unire(int a,int b){
    int sefa,sefb;
    sefa=sefsup(a);
    sefb=sefsup(b);
    sef[sefb]=sefa;

}

int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    int i,x,y,op;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        sef[i]=i;
    for(i=1;i<=m;i++){
        cin>>op>>x>>y;
        if(op==1)
            unire(x,y);
        else{
            sef[x]=sefsup(x);
            sef[y]=sefsup(y);
            if(sef[x]==sef[y])
                cout<<"DA"<<'\n';
            else
                cout<<"NU"<<'\n';
        }
    }
    return 0;
}