Cod sursa(job #2207075)

Utilizator vladth11Vlad Haivas vladth11 Data 24 mai 2018 20:36:59
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <fstream>
#define N 100010
using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");
int numar[N],principal[N];
int radacina(int x){
    if(principal[x] == 0)
        return x;
    principal[x] = radacina(principal[x]);
    return principal[x];
}
void reuniune(int x,int y){
    int a = radacina(x),b = radacina(y);
    if(numar[a] > numar[b])
    {
        numar[a] += numar[b];
        principal[b] = a;
    }else{
        numar[b] += numar[a];
        principal[a] = b;
    }
}
bool verific(int x,int y){
    if(radacina(x) == radacina(y))
        return true;
    return false;
}
int main()
{
    int a,b,operatie,x,y,i;
    cin >> a >> b;
    for(i = 1;i <= a;i++){
        numar[i] = 1;
    }
    for(i = 1;i <= b;i++){
        cin >> operatie >> x >> y;
        if(operatie == 1){
            reuniune(x,y);
        }else if(operatie == 2){
            if(verific(x,y))
                cout << "DA\n";
            else
                cout << "NU\n";
        }
    }
    return 0;
}