Cod sursa(job #2090023)

Utilizator DragosArseneDragos Arsene DragosArsene Data 17 decembrie 2017 14:55:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.73 kb
#include <iostream>
#include <stdio.h>
using namespace std;
int t[100001];
int tata(int x){
if(t[x]==x)
    return x;
else{
    t[x]=tata(t[x]);
return t[x];
}
}

void join(int x, int y){
int rx, ry;
rx=tata(x);
ry=tata(y);
t[rx]=ry;
}
int main() {
    FILE *fin, *fout;
    int a, b, i, o, n, m, op;

fin = fopen("disjoint.in", "r");
fout = fopen("disjoint.out", "w");

fscanf(fin,"%d%d", &n, &m);
for(i=1;i<=n;i++){
    t[i]=i;
}

for(i=1;i<=m;i++){
    fscanf(fin,"%d%d%d", &op, &a, &b);
    if(op==1)
        join(a, b);
    else{
        if(tata(a)==tata(b))
            fprintf(fout,"DA\n");
        else
            fprintf(fout,"NU\n");
    }
}




fclose(fin);
fclose(fout);

    return 0;
}