Cod sursa(job #2050684)

Utilizator Alex.PAlexandru Pacurar Alex.P Data 28 octombrie 2017 10:59:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <stdio.h>
#include <stdlib.h>

using namespace std;

int v[100001];

int dady(int x){
    if(v[x]==x)
        return x;
    else{
        v[x]=dady(v[x]);
        return v[x];
    }
}

inline void join(int x, int y){
    int tati1, tati2;
    tati1=dady(x);
    tati2=dady(y);
    v[tati2]=tati1;
}

int main()
{
    FILE *fin, *fout;
    int n,m,x,y,op;
    fin=fopen("disjoint.in","r");
    fout=fopen("disjoint.out","w");
    fscanf(fin,"%d%d",&n,&m);
    for(int i=1;i<=n;i++)
        v[i]=i;
    for(m;m>0;m--){
        fscanf(fin,"%d%d%d",&op,&x,&y);
        if(op==1){
            join(x,y);
        }else{
            if(dady(x)==dady(y))
                fprintf(fout,"DA\n");
            else
                fprintf(fout,"NU\n");
        }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}