Cod sursa(job #2348413)

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

int v[100000];

int sz[100000];

int parc(int i){
    if(v[i]==i)
        return i;
    if(v[i]!=i)
    {
        v[i]=parc(v[i]);
        return v[i];
    }
}

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++){
        v[i]=i;
        sz[i]=1;
    }
    for(i=0;i<m;i++){
        fscanf(fi,"%d%d%d",&cer,&a,&b);
        a--;
        b--;
        if(cer==1){
            parc(a);
            parc(b);
            if(sz[a]>sz[b]){
                v[v[b]]=v[a];
                parc(b);
            }
            else {
                v[v[a]]=v[b];
                parc(a);
            }
        }
        else {
            if(v[a]==v[b])
                fprintf(fo,"DA\n");
            else fprintf(fo,"NU\n");
        }
    }
    fclose(fi);
    fclose(fo);
    return 0;
}