Cod sursa(job #2696247)

Utilizator paulm238Madaras Paul paulm238 Data 15 ianuarie 2021 16:45:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

void pint(int p[], int n)
{
    for (int i = 1; i <= n; i ++)
        p[i] = i;
}
int sef(int a, int p[])
{
    int s = a;
    while(p[a]!=a)
        a = p[a];
    p[s] = a;
    return a;
}
void add(int a, int b, int p[])
{
    p[sef(b,p)] = sef(a,p);
}
void verf(int a, int b, int p[])
{
    while(p[a] != a)
    {
        a = sef(a,p);
    }
    while(p[b] != b)
    {
        b = sef(b,p);
    }
    if ( a == b )
        out << "DA" << '\n';
    else
        out << "NU" << '\n';
}
int main()
{
    int n, op, p[100001], c, a, b;
    in >> n >> op;
    pint(p,n);
    for(int i = 1; i <=op; i ++)
    {
        in >> c >> a >> b;
        if( c == 1 )
            add(a,b,p);
        else
            verf(a,b,p);
    }
    return 0;
}