Cod sursa(job #2713739)

Utilizator Ionut_neuer58Raducu Ioan Stefan Ionut_neuer58 Data 28 februarie 2021 15:37:01
Problema Paduri de multimi disjuncte Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
///#include <iostream>
#include <fstream>
const int SIZE = 1e5+10;

using namespace std;

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

int n, m;
int cer, a, b;

int v[SIZE]{-1};

int getRoot(int node)
{
    while(v[node]>0) node=v[node];
    return node;
}

void unite(int a, int b)
{
    int ra=getRoot(a), rb=getRoot(b);
    if(ra>rb) swap(ra, rb);
    v[ra]+=v[rb], v[rb]=ra;
}

bool sameRoot(int a, int b)
{
    return (getRoot(a)==getRoot(b));
}

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