Cod sursa(job #3195901)

Utilizator Iustin2812Ion Iustin Ciprian Iustin2812 Data 22 ianuarie 2024 08:44:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int n,m;
int tata[100001];

void init0(){
    for(int i=1;i<=n;i++)
        tata[i]=-1;
}
int find_root(int node){
    if(tata[node]<0)
        return node;

    int root=find_root(tata[node]);
    tata[node]=root;
    return root;
}

void roots(int x,int y){
    int r_y=find_root(x);
    int r_z=find_root(y);
    if(r_y==r_z)
        return;
    if(r_y<r_z)
        swap(r_y,r_z);
    tata[r_z]+=tata[r_y];
    tata[r_y]=r_z;

}

int main() {
    fin>>n>>m;
    int x,y,z;
    init0();
    for(int i=1;i<=m;i++){
        fin>>x>>y>>z;
        if(x==1){
            roots(y,z);
        }
        else{
            if(find_root(y)==find_root(z))
                fout<<"DA";
            else
                fout<<"NU";
            fout<<endl;
        }
    }
    return 0;
}