Cod sursa(job #1467956)

Utilizator Master011Dragos Martac Master011 Data 5 august 2015 00:38:09
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
//Sursa fara compresia drumurilor
//Cu reuniune dupa rang

#include<cstdio>

using namespace std;

int t[100010], n, sz[100010];

int rad (int x){
    if(t[x]==0) return x;
    int r = rad (t[x]);
    //t[x] = r;
    return r;
}

int main(){
    FILE *in=fopen("disjoint.in","r");
    FILE *out=fopen("disjoint.out","w");

    int m,type,x,y;  fscanf(in,"%d%d",&n,&m);

    for(int i = 0 ; i <= n ; i++){
        sz[i] = 1;
    }

    int a, b;

    while(m--){
        fscanf(in,"%d%d%d",&type,&x,&y);
        if(type==1){
            a = rad(x);
            b = rad(y);
            if(a != b){
                if(sz[a] < sz[b]){
                    t[a] = b;
                    sz[b] += sz[a];
                }else{
                    t[b] = a;
                    sz[a] += sz[b];
                }
            }

        }else{
            if(rad(x)==rad(y))
                fprintf(out,"DA\n");
            else
                fprintf(out,"NU\n");
        }
    }

    fclose(in);
    fclose(out);
    return 0;
}