Cod sursa(job #2348426)

Utilizator rares1012Rares Cautis rares1012 Data 19 februarie 2019 18:29:47
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

int v[100001];

int sz[100001];

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

void mrg(int a,int b){
    a=get(a);
    b=get(b);
    if(sz[a]<sz[b]){
        a+=b;
        b=a-b;
        a=a-b;
    }
    v[b]=a;
    sz[a]+=sz[b];
}

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