Cod sursa(job #3261687)

Utilizator Wizard_49Bolocan Vlad Cristian Wizard_49 Data 7 decembrie 2024 11:18:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>

using namespace std;
const int NMAX=1e5;

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

int tata[NMAX+1];

int det_lider(int x)
{
    int lider=x;
    while(lider!=tata[lider])
        lider=tata[lider];

    int aux;
    while(x!=tata[x])
    {
        aux=x;
        x=tata[x];
        tata[aux]=lider;
    }

    return lider;
}

void update(int x, int y){
    int lider_x=det_lider(x);
    int lider_y=det_lider(y);

    if(lider_x!=lider_y)
        tata[lider_y]=lider_x;
}

bool cautare(int x,int y){
    int lider_x=det_lider(x);
    int lider_y=det_lider(y);

    return lider_x==lider_y;
}

int main()
{
    int n,m,o,x,y;
    fin>>n>>m;

    for(int i=1;i<=n;i++)
        tata[i]=i;

    for(int i=1;i<=m;i++)
    {
        fin>>o>>x>>y;
        if(o==1)
            update(x,y);
        else
            if(cautare(x,y))
                fout<<"DA\n";
            else
                fout<<"NU\n";
    }
    return 0;
}