Cod sursa(job #1649871)

Utilizator robx12lnLinca Robert robx12ln Data 11 martie 2016 15:29:04
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<cstdio>
using namespace std;
FILE * fin = fopen("disjoint.in","r");
FILE * fout = fopen("disjoint.out","w");
int t[100005],n,m,x,y,op,a,b;
int rad( int nod ){
    if( t[nod] > 0 ){
        nod = rad( t[nod] );
    }
    return nod;
}
int main(){
    fscanf( fin, "%d%d", &n, &m );
    for( int i = 1; i <= n; i++ ){
        t[i] = -1;
    }
    for( int k = 1; k <= m; k++ ){
        fscanf( fin, "%d%d%d", &op, &x, &y );
        if( op == 1 ){
            a = rad(x);
            b = rad(y);
            if( t[a] <= t[b] ){
                t[a] += t[b];
                t[b] = a;
            }else{
                t[b] += t[a];
                t[a] = b;
            }
        }else{
            a = rad(x);
            b = rad(y);
            if( a == b ){
                fprintf( fout, "DA\n" );
            }else{
                fprintf( fout, "NU\n" );
            }
        }
    }
    return 0;
}