Cod sursa(job #3169565)

Utilizator adrian_zahariaZaharia Adrian adrian_zaharia Data 15 noiembrie 2023 14:53:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;

int n;
int m;
int q,x,y;
int v[100005];
int getRoot(int node){
    int root=node;
    while(v[root])
        root=v[root];

    int new_root=node;
    int last_root;
    while(v[new_root]){
        last_root=new_root;
        new_root=v[new_root];
        v[last_root]=root;
    }
    return root;
}

int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);

    scanf("%d%d",&n,&m);

    for(int i=1;i<=m;i++){
        scanf("%d%d%d",&q,&x,&y);

        if(q==1){
            int rootX=getRoot(x);
            int rootY=getRoot(y);
            if(rootX!=rootY){
                v[rootX]=rootY;
            }
        }else{
            if(getRoot(x)==getRoot(y))
                printf("DA\n");
            else
                printf("NU\n");
        }
    }

    return 0;
}