Cod sursa(job #1929438)

Utilizator CodrinsahCotarlan Codrin Codrinsah Data 17 martie 2017 17:14:12
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>
using namespace std;
ifstream fi ("disjoint.in");
ofstream fo ("disjoint.out");
int i,comp[100006],lg[100006],n,nr_op,op,n1,n2,tip;
int reprez(int nod)
{
  while (nod!=comp[nod])
    nod=comp[nod];
  return nod;
}
void unire (int nod1,int nod2)
{
  if (lg[nod1]>lg[nod2])
    {
      comp[nod2]=nod1;
      return;
    }
  if (lg[nod2]>lg[nod1])
  {
    comp[nod1]=nod2;
    return;
  }
  if (lg[nod1]==lg[nod2])
  {
    comp[nod2]=nod1;
    lg[nod1]++;
    return;
  }
}
int main()
{
    fi>>n>>nr_op;
    for (i=1;i<=n;i++)
    {
      comp[i]=i;
      lg[i]=1;
    }
    for (op=1;op<=nr_op;op++)
    {
      fi>>tip>>n1>>n2;
      if (n1>n2) swap (n1,n2);
      if (tip==1) unire (reprez(n1),reprez(n2));
      if (tip==2)
      {
        if (reprez(n1)==reprez(n2)) fo<<"DA"<<'\n';
        else fo<<"NU"<<'\n';
      }
    }
    return 0;
}