Cod sursa(job #1450428)

Utilizator akaprosAna Kapros akapros Data 13 iunie 2015 13:05:25
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#define Nmax 100005
using namespace std;
int n, i, j, m, t[Nmax];
int radacina(int x)
{
    if (t[x] == 0)
       return x;
    t[x] = radacina(t[x]);
    return t[x];
}
void reuniune(int x, int y)
{
     int rx = radacina(x),
         ry = radacina(y);
     t[rx] = ry;
}
bool apart(int x, int y)
{
     return radacina(x) == radacina(y);
}
int main()
{
     int c, x, y;
     freopen("disjoint.in", "r", stdin);
     freopen("disjoint.out", "w", stdout);
     scanf("%d %d", &n, &m);
     while (m --)
     {
          scanf("%d %d %d", &c, &x, &y);
          if (c == 1) reuniune(x, y);
          else
          if (apart(x, y))
              printf("DA\n");
         else printf("NU\n");
     }
     return 0;
}