Cod sursa(job #2480792)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 26 octombrie 2019 10:18:52
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 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 n,m;

int findtata(int a){
    int aux;
    aux = a;
    while(T[aux] > 0){
        aux = T[aux];
    }
    while(T[a] > 0){
        if(T[a] > 0)
            T[a] = aux;
        a = T[a];
    }
    return aux;
}

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

int main()
{
    int a1,a2,c1,i;
    fin>>n>>m;
    for(i = 1; i <= n; i++){
        T[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;
}