Cod sursa(job #2694229)

Utilizator avtobusAvtobus avtobus Data 8 ianuarie 2021 15:02:06
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <stdio.h>
#include <bits/stdc++.h>

#define rep(i, n) for(int i = 0; i < (int)(n); i++)

using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;
const int INF = 0x3f3f3f3f;

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

const int Nmax = 100555;
int t[Nmax];

int root(int a) {
  if (a == t[a]) { return a; }
  return t[a] = root(t[a]);
}

void join(int a, int b) {
  if (root(a) != root(b)) {
    t[root(a)] = root(b);
  }
}

int main(void) {
  // freopen("disjoint.in", "r", stdin);
  std::ios_base::sync_with_stdio(false);
  std::cin.tie(NULL);
  int n, m, a,b, op;
  fin >> n >> m;
  rep(i, n+1) { t[i] = i; }
  rep(i,m) {
    fin >> op >> a >> b;
    if (op == 1) {
      join(a, b);
    } else {
      fout << (root(a) == root(b) ? "DA" : "NU") << "\n";
    }
  }

  return 0;
}