Cod sursa(job #2417338)

Utilizator avtobusAvtobus avtobus Data 29 aprilie 2019 15:56:41
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <stdio.h>
#include <bits/stdc++.h>

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

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

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

const int Nmax = 100555;
int N, M, q, x, y, a[Nmax];

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

void join(int x, int y) {
  int rx = root(x);
  int ry = root(y);
  a[rx] = a[ry] = min(rx, ry);
}

bool query(int x, int y) {
  return root(x) == root(y);
}

int main(void) {
  fin >> N >> M;
  rep(i, N+1) { a[i] = i; }

  while(M--) {
    fin >> q >> x >> y;
    if (q == 1) {
      join(x, y);
    } else if (q == 2) {
      fout << (root(x) == root(y) ? "DA\n" : "NU\n" );
    }
  }

  return 0;
}