Cod sursa(job #427616)

Utilizator hendrikHendrik Lai hendrik Data 28 martie 2010 06:08:32
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std;

void open(){
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
}

#define MAXN 100010
int n,m,type,a,b,par[MAXN],rank[MAXN];

int find(int a){
    if (a!=par[a]) par[a]=find(par[a]);
    return par[a];
}

int main(){
    open();
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;i++){
        par[i]=i;
        rank[i]=1;
    }
    for (int i=0;i<m;i++){
        scanf("%d%d%d",&type,&a,&b);
        a=find(a);b=find(b);
        if (type==1){
            if (a==b) continue;
            if (rank[a]<rank[b]){
                par[a]=b;
            }
            else par[b]=a;
        }
        else {
            if (a==b) printf("DA\n");
            else printf("NU\n");
        }
    }
    //system("pause");
    return 0;
}