Cod sursa(job #1613076)

Utilizator Balescu_OvidiuBalescu Ovidiu-Gheorghe Balescu_Ovidiu Data 25 februarie 2016 10:39:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <stdio.h>
#include <stdlib.h>

unsigned long t[100000];
unsigned long Search(unsigned long x){
    while(t[x]!=x)
        x=t[x];
    return x;
}
void Add(unsigned long x,unsigned long y){
    t[y]=x;
}
int main(){
    unsigned long n,m;
    FILE*f=fopen("disjoint.in","r");
    fscanf(f,"%lu %lu",&n,&m);
    for(unsigned long i=0;i<n;i++)
        t[i]=i;
    FILE*g=fopen("disjoint.out","w");
    while(m--){
        short op;
        unsigned long x,y;
        fscanf(f,"%hd %lu %lu",&op,&x,&y);
        if(op==1)
            Add(Search(x-1),Search(y-1));
        else if(Search(x-1)==Search(y-1))
            fprintf(g,"DA\n");
        else
            fprintf(g,"NU\n");
    }
    fclose(f);
    fclose(g);
    return 0;
}