Cod sursa(job #2420163)

Utilizator MortemPlaiasu Iulia-Silvia Mortem Data 10 mai 2019 20:32:18
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>

FILE * fin= fopen("disjoint.in","r");
FILE * fout= fopen("disjoint.out","w");

int id[100500];
int siz[100500];
int n,m;

int root(int x)
{
  while(x!=id[x])
  {
    id[x]=id[id[x]];
    x= id[x];
  }
  return x;
}

void unite(int x, int y)
{
  x= root(x);
  y= root(y);
  if(x!=y)
  {
    if(siz[x]>siz[y])
    {
      siz[x]+=siz[y];
      id[y]=x;
    }
    else
    {
      siz[y]+=siz[x];
      id[x]=y;
    }
  }
}

void write()
{
  for(int i=1;i<=n;i++)
    std::cout<<root(i)<<" ";
  std::cout<<"\n";
}

int main()
{
  fscanf(fin,"%d %d",&n,&m);
  for(int i=1;i<=n;i++)
    id[i]=i;
  for(int i=0;i<m;i++)
  {
    int c,x,y;
    fscanf(fin,"%d %d %d",&c,&x,&y);
    if(c==1)
      unite(x,y);
    else
    {
      if(root(x)==root(y))
        fprintf(fout,"DA\n");
      else
        fprintf(fout,"NU\n");
    }
  }
}