Cod sursa(job #3182497)

Utilizator alexioana_2006Apostolache Alexia alexioana_2006 Data 9 decembrie 2023 09:05:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nmax=1e5+1;

int n, m, T[nmax], cod, x, y, rang[nmax];

int multime(int nod)
{
  if(T[nod]!=nod) T[nod]=multime(T[nod]);

  return T[nod];
}

void reuneste(int i, int j)
{
  i=multime(i); j=multime(j);

  if(i==j) return;

  if(rang[i]<rang[j]) T[i]=j;

  else T[j]=i;

  if(rang[i]==rang[j]) rang[i]++;

}

void solve(int a, int b)
{
  if(multime(a)==multime(b)) fout<<"DA"<<'\n';

  else fout<<"NU"<<'\n';

}

int main()
{

 fin>>n>>m;

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

 for(int i=1;i<=m;++i)
 {
   fin>>cod>>x>>y;

   if(cod==1) reuneste(x,y);

   else solve(x,y);
 }

    return 0;
}