Cod sursa(job #2639078)

Utilizator nicolaee2Martinescu Nicolae nicolaee2 Data 31 iulie 2020 12:17:00
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include<bits/stdc++.h>

using namespace std;

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

#define NMAX 100005

int n,m;
vector <int> ma[NMAX];
int r[NMAX],t[NMAX];

int find(int x)
{
   int rad = x;
   while(t[rad]!=0)
   {
      rad = t[rad];
   }
   while(t[x]!=0)
   {
      int y = t[x];
      t[x] = rad;
      x = y;
   }
   return rad;

}

void uneste(int rad1,int rad2)
{
   if(r[rad1] < r[rad2])
   {
      t[rad1] = rad2;
   }
   else if(r[rad1] > r[rad2])
   {
      t[rad2] = rad1;
   }
   else
   {
      t[rad1] = rad2;
      r[rad2]++;
   }
}
void citeste()
{
   fin>>n>>m;
   for(int i=1;i<=m;i++)
   {
      int mod,x,y;
      fin>>mod>>x>>y;
      if(mod==1)
      {
         int rad1 = find(x);
         int rad2 = find(y);
         if(rad1 != rad2)
         {
            uneste(rad1,rad2);
         }
      }
      else
      {
         if(find(x)!=find(y))
         {
            fout<<"NU"<<'\n';
         }
         else
         {
            fout<<"DA"<<'\n';
         }
      }
   }
}

int main(){

   citeste();

   return 0;

}