Cod sursa(job #3176874)

Utilizator thinkphpAdrian Statescu thinkphp Data 27 noiembrie 2023 22:25:49
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <stdio.h>

#define Nmax 100100

int rank[100002];
int p[100002];
int n;
int i;
int x;
int y;
int cod;
int m;

int FindSet(int x)
{
    if (x != p[x])
     p[x] = FindSet(p[x]);
    return p[x];
}


void Union(int x, int y)
{
    int r1, r2;

    r1 = FindSet(x);
    r2 = FindSet(y);
    if (rank[r1] > rank[r2])
      p[r2] = r1;
    else
    {
      if (rank[r1] == rank[r2]) rank[r2]++;
      p[r1] = r2;
    }
}

int main()
{
    freopen("disjoint.in","r",stdin);
    freopen("disjoint.out","w",stdout);
    scanf("%d %d", &n, &m);

    for(i = 1; i <= n; i++)
     p[i] = i;

    for(i = 1; i <= m; i++)
     {
         scanf("%d %d %d", &cod, &x, &y);
         if (cod == 1)
          Union(x,y);
         if (cod == 2)
           {
               int r1 = FindSet(x);
               int r2 = FindSet(y);
               if (r1 != r2) printf("NU\n");
                        else printf("DA\n");

           }
     }
    return 0;
}