Cod sursa(job #2504550)

Utilizator razvanmihailaMihaila Razvan razvanmihaila Data 5 decembrie 2019 08:55:08
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include<cstdio>
using namespace std;
int n, m, i, op, tata[100001], x, y;

int findtata(int x)
{
    if(x == tata[x])
        return x;
    else
        return tata[x] = findtata(tata[x]);
}

void uniune(int x, int y)
{
    int sefx, sefy;
    sefx = findtata(x);
    sefy = findtata(y);
    tata[sefx] = sefy;
}

int main()
{
    FILE *fin, *fout;
    fin=fopen("disjoint.in" ,"r");
    fout=fopen("disjoint.out" ,"w");
    fscanf(fin, "%d%d" ,&n ,&m);

    for(i = 1; i <= n; i ++)
        tata[i] = i;
    for(i = 1; i <= m; i ++)
    {
        fscanf(fin, "%d%d%d" ,&op ,&x ,&y);
        if(op == 1)
            uniune(x, y);
        else
            if(findtata(x) == findtata(y))
                fprintf(fout, "DA\n");
        else
            fprintf(fout, "NU\n");
    }
    return 0;
}