Cod sursa(job #2480838)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 26 octombrie 2019 10:34:48
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <bits/stdc++.h>
#define MOD 1999999973
#define ull unsigned long long

using namespace std;

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

int T[100005];
int R[100005];
int n,m;

int findtata(int a){
    while(T[a] != a){
        a = T[a];
    }
    return a;
}

void unire(int a,int b){
    if(R[a] < R[b]){
        T[a] = b;
    }else if(R[a] > R[b]){
        T[b] = a;
    }else if(R[a] == R[b]){
        T[a] = b;
        R[b]++;
    }
}

int main()
{
    int a1,a2,c1,i;
    fin>>n>>m;
    for(i = 1; i <= n; i++){
        T[i] = i;
        R[i] = 1;
    }
    for(i = 1; i <= m; i++){
        fin>>c1>>a1>>a2;
        if(c1 == 2){
            int aux1,aux2;
            aux1 = findtata(a1);
            aux2 = findtata(a2);
            if(aux1 == aux2){
                fout<<"DA"<<endl;
            }else{
                fout<<"NU"<<endl;
            }
        }else if(c1 == 1){
            unire(findtata(a1),findtata(a2));
        }
    }
    return 0;
}