Cod sursa(job #2600541)

Utilizator raduandreiRadu Andrei raduandrei Data 12 aprilie 2020 19:35:19
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
#define NMAX 100200
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");

int rang[NMAX],t[NMAX];

int radacina(int x)
{
    if(x==t[x]) return t[x];
    t[x]=radacina(t[x]);
    return t[x];
}
void unire(int x, int y)
{
    if(rang[x]>rang[y])
        t[y]=x;
    else t[x]=y;
    if(rang[x]==rang[y])
        rang[y]++;
}

int main()
{
  int x,y,cod,n,m;
  in>>n>>m;
  for(int i=1; i<=n; ++i)
  {
      t[i]=i;
      rang[i]=1;
  }
  for(int i=1; i<=m; ++i)
  {
      in>>cod>>x>>y;
      if(cod==1)
        unire(radacina(x),radacina(y));
      else
      {
          if(radacina(x)==radacina(y))
            out<<"DA";
          else out<<"NU";
          out<<"\n";
      }
  }
    return 0;
}