Cod sursa(job #2837357)

Utilizator popasebastian1213@gmail.comPopa Sebastian [email protected] Data 22 ianuarie 2022 10:03:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>
#define NMAX 100002
using namespace std;
ifstream fin("disjoint.in");
ofstream fout("disjoint.out");
int tata[NMAX],h[NMAX];
void citire();
int gasire(int x);
void unire(int x, int y);
int n,m;
int main()
{
    citire();
    return 0;
}
void citire()
{
    int i,j,tip,x,y;
    fin>>n>>m;
    for(j=1;j<=m;j++)
    {
     fin>>tip>>x>>y;
     if(tip==1)
     {
          unire(x,y);
     }
     else
     {
         if(gasire(x)!=gasire(y))
            fout<<"NU"<<'\n';
         else
            fout<<"DA"<<'\n';
     }
    }
}
int gasire(int x)
{
    int r;
    r=x;
    while(tata[r])
            r=tata[r];
    while(tata[x])
    {
        int r2=tata[x];
        tata[x]=r;
        x=r2;
    }
    return r;
}
void unire(int x, int y)
{
     x=gasire(x);
     y=gasire(y);
     if(x==y)
        return;
     if(h[x]<h[y])
     {
        tata[x]=y;
     }
    if(h[x]>h[y])
            tata[y]=x;
    if(h[x]==h[y])
     {
         tata[x]=y;
         h[y]++;
     }
}