Cod sursa(job #1857169)

Utilizator GeorginskyGeorge Georginsky Data 25 ianuarie 2017 21:26:31
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <cstdio>
#include <unordered_map>
using namespace std;
struct Element{int r, p;}u[100005];
int n, m;

int find_set(int x){
    if(x!=u[x].p)u[x].p=find_set(u[x].p);
    return u[x].p;
}

void merge_sets(int x, int y){
    if(u[x].r>u[y].r)u[y].p=x;
    else u[x].p=y;
    if(u[x].r==u[y].r)u[y].r++;
}

int main(){
    freopen("disjoint.in", "r", stdin);
    freopen("disjoint.out", "w", stdout);
    cin>>n>>m;
    int op, a, b, set1, set2;
    for(int i=1; i<=n; i++)u[i].p=i,u[i].r=1;
    for(int i=1; i<=m; i++){
        cin>>op>>a>>b;
        set1=find_set(a);
        set2=find_set(b);
        if(op==1)merge_sets(set1, set2);
        else cout<<((find_set(set1)==find_set(set2))?"DA":"NU")<<"\n";
    }
    return 0;
}