Cod sursa(job #2512564)

Utilizator Vladv01Vlad Vladut Vladv01 Data 21 decembrie 2019 11:45:59
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <iostream>

using namespace std;


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


int t[100005],ad[100005];

int n,m;

int radacina(int x)
{
    if (x == t[x])
        return x;
    int f = radacina(t[x]);
    t[x] = f;
    return f;
}


void verif(int x,int y)
{
    if(radacina(x)==radacina(y))
        g<<"DA\n";
    else
        g<<"NU\n";
}

void unire(int x,int y)
{
    if (ad[x]>ad[y])
        t[y]=x;
    else
        t[x]=y;
    if (ad[x] == ad[y])
        ad[y]++;
}

int type,x,y;

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;i++)
        t[i]=i;
    for(int i=1;i<=m;i++)
    {
        f>>type>>x>>y;
        if(type==1)
            unire(x,y);
        else
            verif(x,y);
    }
    return 0;
}