Cod sursa(job #3370484)

Utilizator cleo15Cleopatra cleo15 Data 26 octombrie 2026 14:23:41
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
#include <fstream>
using namespace std;

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

const int NMAX = 1e5;
int p[NMAX + 1], sz [NMAX + 1];

int Find(int x) {
   while (x != p[x]) {
      x = p[x];
   }
   return x;
}

void Union(int x, int y) {
   x = Find(x);
   y = Find(y);
   if (sz[x] > sz[y]) {
      p[y] = x;
      sz[x] += sz[y];
   }
   else {
      p[x] = y;
      sz[y] += sz[x];
   }
}

int main() {
   int n, q;
   fin >> n>> q;
   for (int i = 1; i <= n; i++) {
      p[i] = i;
      sz[i] = 1;
   }
   for (int i= 1; i <= q; i++) {
      int op, x, y;
      fin >> op >> x >> y;
      if (op == 1) {
         Union(x, y);
      }
      else {
         if (Find(x) != Find(y)) {
            fout << "NU\n";
         }
         else {
            fout << "DA\n";
         }
      }
   }
}