Cod sursa(job #2451600)

Utilizator ciutanpCiuta Andrei Calin ciutanp Data 27 august 2019 13:10:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda repost Marime 0.75 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int t[100001],n,m,h[100001];

void unio(int x,int y)
{
    if(h[x]<h[y])
    t[x]=y;
    else
        t[y]=x;
    if(h[x]==h[y])
        h[y]++;

}

int tat(int x)
{
    int r,y;
    for(r=x;r!=t[r];r=t[r]);

    for(;x!=t[x];)
    {
        y=t[x];
        t[x]=r;
        x=t[x];
    }
    return r;
}

int main()
{
  f>>n>>m;
  for(int i=1;i<=n;++i)
    t[i]=i,h[i]=1;
  while(m--)
  {
      int op,x,y;
      f>>op>>x>>y;
      if(op==1)
      {
          unio(tat(x),tat(y));
      }
      else
      {
          if(tat(x)==tat(y))
            g<<"DA\n";
          else
            g<<"NU\n";
      }
  }
}