Cod sursa(job #2346661)

Utilizator priboiraduPriboi Radu Bogdan priboiradu Data 17 februarie 2019 22:11:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
//#include <bits/stdc++.h>
#include <stdio.h>
#include <stdlib.h>

int dad[100001];

int boss( int slave ) {
    if ( dad[slave] != slave )
        dad[slave] = boss( dad[slave] );
    return dad[slave];
}

int main() {
    FILE *fin, *fout;
    int n, m, i, c, x, y;
    fin = fopen( "disjoint.in", "r" );
    fout = fopen( "disjoint.out", "w" );
    fscanf( fin, "%d%d", &n, &m );
    for ( i = 1; i <= n; i++ )
        dad[i] = i;
    for ( i = 0; i < m; i++ ) {
        fscanf( fin, "%d%d%d", &c, &x, &y );
        if ( c == 1 ) {
            dad[ boss( y )] = boss( x );
        } else {
            if ( boss( x ) == boss( y ) )
                fprintf( fout, "DA\n" );
            else
                fprintf( fout, "NU\n" );
        }
    }
    fclose( fin );
    fclose( fout );
    return 0;
}