Cod sursa(job #2942365)

Utilizator Anastasia7Anastasia Anastasia7 Data 19 noiembrie 2022 16:51:32
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>

using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tata[100002], ord[100002];
void init_tata(int n, int tata[])
{
    for(int i=0; i<n; i++)
    {
        tata[i]=i;
    }
}
int Reprez(int u)
{
    if(tata[u]!=u)
        tata[u] = Reprez(tata[u]);
    return tata[u];
}
void reuneste(int u, int v)
{
    int ru=Reprez(u);
    int rv=Reprez(v);
    if (ord[ru]>ord[rv])
    {
        tata[rv] = ru;
        ord[ru] += ord[rv];
    }
    else
    {
        tata[ru] = rv;
        ord[rv] += ord[ru];
    }
}
void citire()
{
    int n,m,cod,u,v;
    fin>>n>>m;
    init_tata(n,tata);
    for(int i=0; i<m; i++)
    {
        fin>>cod>>u>>v;
        if(cod==1)
            reuneste(u,v);
        else
        {
            if(Reprez(u)==Reprez(v))
                fout<<"DA"<<endl;
            else fout<<"NU"<<endl;
        }
    }
}
int main()
{
    citire();
    return 0;
}