Cod sursa(job #2920241)

Utilizator RolandPetreanPetrean Roland RolandPetrean Data 23 august 2022 09:36:18
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
// https://www.varena.ro/problema/disjoint
// Fac union find by rank cu path compression si iau TLE pe 50% din teste, nu stiu de ce
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define mod 1000000007

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

int uf[100000], r[100000];

int uf_find(int x) {
  if (uf[x] == x) return x;
  return uf[x] = uf_find(uf[x]);
}

void uf_union(int a, int b) {
  a=uf_find(a);
  b=uf_find(b);
  if (a != b) {
    if (r[a] < r[b]) swap(a, b);
    uf[b] = a;
    if (r[a] == r[b]) ++r[a];
  }
}

int main() {
  int n, m;
  fin>>n>>m;

  for (int i=0; i<n; ++i) uf[i] = i;

  for (int i=0; i<m; ++i) {
    int c, a, b;
    fin>>c>>a>>b;
    --a; --b;

    if (c==1) uf_union(a, b);
    else {
      if (uf_find(a) == uf_find(b)) fout<<"DA"<<endl;
      else fout<<"NU"<<endl;
    }
  }
}