Cod sursa(job #2719429)

Utilizator victorzarzuZarzu Victor victorzarzu Data 9 martie 2021 20:47:26
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.62 kb
#include <bits/stdc++.h>

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

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])
    t[y] = x, r[x] += r[y];
  else
    t[x] = y, r[y] += r[x];
}

void Solve()
{
  f>>n>>m;
  for(int i = 1;i <= n;++i)
    t[i] = i, r[i] = 1;
  for(int i = 1;i <= m;++i)
  {
    f>>x>>y>>z;
    if(x == 2)
      g<<(find(y) == find(z) ? "DA" : "NU")<<'\n';
    else if(find(y) != find(z))
      unite(find(y), find(z));
  }
}

int main()
{
  Solve();
  return 0;
}