Cod sursa(job #2804458)

Utilizator victorzarzuZarzu Victor victorzarzu Data 21 noiembrie 2021 11:20:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <bits/stdc++.h>

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

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

void unite(int x, int y)
{
  if(t[x] == t[y])
    return;
  if(rang[x] < rang[y])
    rang[y] += rang[x], t[x] = y;
  else
    rang[x] += rang[y], t[y] = x;
}

void solve()
{
  f>>n>>m;
  for(int i = 1;i <= n;++i)
    rang[i] = 1, t[i] = i;

  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';
        }
    }
  f.close();
  g.close();
}

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