Cod sursa(job #1718154)

Utilizator mihaimbMihai Badea mihaimb Data 16 iunie 2016 20:35:31
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
using namespace std;

int parent[100001];
int ranks[100001];

void make(int k)
{
  parent[k]=k;
  ranks[k]=0;
}

int find(int k)
{
  if(k!=parent[k])
  {
    parent[k]=find(parent[k]);
  }

  return parent[k];
}

void uni(int a, int b)
{
  int ra=find(a);
  int rb=find(b);

  if(ra<rb)
  {
    parent[ra]=rb;
  }
  else if(ra>rb)
  {
    parent[rb]=ra;
  }
  else
  {
    parent[rb]=ra;
    ranks[ra]++;
  }
}


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

int N,M,t,x,y;

fin>>N>>M;

for(int i=1; i<N; i++)
{
  make(i);
}

for(int i=1; i<=M; i++)
{
  fin>>t>>x>>y;
  if(t==1) uni(x,y);
  else
  {
    if(find(x)==find(y)) fout<<"DA\n";
    else fout<<"NU\n";
  }
}


return 0;
}