Cod sursa(job #2521832)

Utilizator nicolaee2Martinescu Nicolae nicolaee2 Data 11 ianuarie 2020 16:17:42
Problema Paduri de multimi disjuncte Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include<fstream>
#include<string.h>
#include<bits/stdc++.h>
#include<math.h>
using namespace std;

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

#define NMAX 100


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[rad1]++;
   }
}

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;
}