Cod sursa(job #2807200)

Utilizator cadmium_Voicu Mihai-Valeriu cadmium_ Data 23 noiembrie 2021 16:07:42
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>

using namespace std;

ifstream cin("disjoint.in");
ofstream cout("disjoint.out");

namespace DSU {
  int dsu[100000];
  int area[100000];
  void init(int n) {
    for(int i=0; i<n; i++) {
      dsu[i]=i;
      area[i]=1;
    }
  }
  int father(int x) {
    return (dsu[x]==x? x : dsu[x]=father(dsu[x]));
  }
  void unite(int x, int y) {
    x=father(x);
    y=father(y);
    if(area[x]<area[y])
      swap(x,y);
    area[x]+=area[y];
    dsu[y]=x;
  }
};

int main() {
  int n,m;
  cin >> n >> m;
  DSU::init(n);
  for(int i=0,x,y,t; i<m; i++) {
    cin >> t >> x >> y;
    --x;
    --y;
    if(t==1) {
      DSU::unite(x,y);
    }
    else {
      cout << (DSU::father(x)==DSU::father(y)? "DA\n" : "NU\n");
    }
  }
}