Cod sursa(job #2365081)

Utilizator rares1012Rares Cautis rares1012 Data 4 martie 2019 11:59:34
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>

int v[100001];
int sz[100001];

int fnd(int k){
    if(v[k]!=0)
    {
        v[k]=fnd(v[k]);
        return v[k];
    }
    return k;
}

void join(int a,int b){
    int x=fnd(a);
    int y=fnd(b);
    if(sz[y]>sz[x]){
        x+=y;
        y=x-y;
        x=x-y;
    }
    v[y]=x;
    sz[x]+=sz[y];
}

int main()
{
    int n,m,a,b,c,i;
    FILE*fi,*fo;
    fi=fopen("disjoint.in","r");
    fo=fopen("disjoint.out","w");
    fscanf(fi,"%d%d",&n,&m);
    for(i=1;i<=n;i++)
        sz[i]=1;
    for(i=0;i<m;i++){
        fscanf(fi,"%d%d%d",&c,&a,&b);
        if(c==1){
            join(a,b);
        }
        else {
            a=fnd(a);
            b=fnd(b);
            if(a==b)
                fprintf(fo,"DA\n");
            else fprintf(fo,"NU\n");
        }
    }
    fclose(fi);
    fclose(fo);
    return 0;
}