Cod sursa(job #3191823)

Utilizator Robert_NicuNicu Robert Cristian Robert_Nicu Data 10 ianuarie 2024 18:23:37
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
#define DIM 100001
using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

int n, m, task, x, y, i;
int tata[DIM];

int get_root(int nod){
    while(tata[nod]>0)
        nod=tata[nod];
    return nod;
}

void join(int nod1, int nod2){
    int root1=get_root(nod1);
    int root2=get_root(nod2);
    if(tata[root1]<=tata[root2]){
        tata[root1]+=tata[root2];
        tata[root2]=root1;
    }else{
        tata[root2]+=tata[root1];
        tata[root1]=root2;
    }
}

int query(int nod1, int nod2){
    int root1=get_root(nod1);
    int root2=get_root(nod2);
    if(root1==root2)
        fout<<"DA\n";
    else fout<<"NU\n";
}

int main(){
    fin>>n>>m;
    for(i=1; i<=n; i++)
        tata[i]=-1;
    for(i=1; i<=m; i++){
        fin>>task>>x>>y;
        if(task==1)
            join(x, y);
        if(task==2)
            query(x, y);
    }
}