Cod sursa(job #2837365)

Utilizator EpureCarlaEpure Carla EpureCarla Data 22 ianuarie 2022 10:06:24
Problema Paduri de multimi disjuncte Scor 0
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],h[100002];

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]++;
     }
}
int n,m;
int main()
{
    citire();
    return 0;
}