Cod sursa(job #2352554)

Utilizator CleliaClelia Maria Dobrescu Clelia Data 23 februarie 2019 13:41:34
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <cstdio>
int sef[100001];
int sefsuprem(int i){
    if (sef[i]==i)
        return i;
    return sef[i]=sefsuprem(sef[i]);
}
void unire(int x,int y){
    sef[x]=sefsuprem(x);
    sef[y]=sefsuprem(y);
    sef[sef[x]]=sef[y];
}
int main (){
    FILE *fin=fopen("disjoint.in","r");
    FILE *fout=fopen("disjoint.out","w");
    int n,m,i,c,x,y;
    fscanf (fin,"%d %d",&n,&m);
    for (i=1;i<=n;i++)
        sef[i]=i;
    for (i=1;i<=m;i++){
        fscanf (fin,"%d %d %d",&c,&x,&y);
        if (c==1)
            unire(x,y);
        else{
            sef[x]=sefsuprem(x);
            sef[y]=sefsuprem(y);
            if (sef[x]==sef[y])
                fprintf (fout,"DA\n");
            else
                fprintf (fout,"NU\n");
        }
    }
    return 0;
}