Cod sursa(job #2931022)

Utilizator victorzarzuZarzu Victor victorzarzu Data 30 octombrie 2022 11:23:09
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>

#define N 100005

using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int n, m;
int t[N], r[N];

int find(int x) {
  if(t[x] == x) {
    return x;
  }
  return t[x] = find(t[x]);
}

void unite(int x, int y) {
  if(r[x] >= r[y]) {
    r[x] += r[y];
    t[y] = x;
    return;
  }
  r[y] += r[x];
  t[x] = y;
}

void read() {
  f>>n>>m;
  for(int i = 1;i <= n;++i) {
    r[i] = 1;
    t[i] = i;
  }
}

void solve() {
  int x, y, z;
  for(int i = 1;i <= m;++i) {
    f>>x>>y>>z;
    if(x == 1) {
      unite(find(y), find(z));
    }
    else {
      if(find(y) == find(z)) {
        g<<"DA\n";
      } else{
        g<<"NU\n";
      }
    }
  }
}

int main() {
  read();
  solve();
  return 0;
}