Cod sursa(job #2704789)

Utilizator StefaniaIrinaDobra Stefania-Irina StefaniaIrina Data 11 februarie 2021 11:42:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int a,b,caz,x,y;
int Tata[100005],Dimensiune[100005];
int Find(int x)
{
    if(x!=Tata[x])
        Tata[x]=Find(Tata[x]);
    return Tata[x];
}
void Unire(int x,int y)
{
    x=Find(x);
    y=Find(y);
    if(Dimensiune[x]<Dimensiune[y])
    {
        Dimensiune[y]+=Dimensiune[x];
        Tata[x]=y;
    }
    else
    {
        Dimensiune[x]+=Dimensiune[y];
        Tata[y]=x;
    }
}

int main()
{
    f>>a>>b;
    for(int i=1;i<=b;i++)
    {
        Tata[i]=i;
        Dimensiune[i]=1;
    }
    for(int i=1;i<=b;i++)
    {
        f>>caz>>x>>y;
        if(caz==1)
        {
            int tata_x=Find(x);
            int tata_y=Find(y);
            if(tata_x!=tata_y)
            {
                Unire(x,y);
            }
        }
        else
        {
            int tata_x=Find(x);
            int tata_y=Find(y);

            if(tata_x==tata_y)
                g<<"DA"<<'\n';
            else g<<"NU"<<'\n';
        }
    }
    f.close();
    g.close();
    return 0;
}