Cod sursa(job #2814790)

Utilizator Maniu_DianaManiu Maria Diana Maniu_Diana Data 8 decembrie 2021 16:57:01
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.62 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("disjoint.in");
ofstream fout("disjoint.out");

const int nmax = 100005;

/*
int n, m, cod;
int vis[nmax];

vector < int > L[nmax];

void dfs(int k)
{
    vis[k] = true;
    for(auto it : L[k])
    {
        if(vis[it] == 0)
            dfs(it);
    }
}

int main()
{
    int x, y;
    fin >> n >> m;
    for(int i = 1; i <= m; i ++)
    {
        fin >> cod >> x >> y;
        if(cod == 1)
        {
         L[x].push_back(y);
         L[y].push_back(x);
        }
        else
        {
            dfs(x);
            if(vis[y] == 1)
                fout << "DA" << '\n';
            else fout << "NU" << '\n';
        }

    }

    return 0;
}
*/

int n, m, cod;
int vis[nmax];
int parinte[nmax], dim[nmax];

vector < int > L[nmax];

int sef(int x)
{
    while(parinte[x] != x)
        x = parinte[x];
    return x;
}

int main()
{
    int x, y;
    fin >> n >> m;
    for(int i = 1; i <= n; i ++)
    {
        parinte[i] = i;
        dim[i] = i;
    }

    for(int i = 1; i <= m; i ++)
    {
        fin >> cod >> x >> y;
        if(cod == 1)
        {
          x = sef(x);
          y = sef(y);
          if(dim[x] > dim[y])
          {
            parinte[y] = x;
            dim[x] += dim[y];
          }
          else
          {
              parinte[x] = y;
              dim[y] += dim[x];
          }

        }
        else
        {
            if(sef(x) == sef(y))
                fout << "DA" << '\n';
            else fout << "NU" << '\n';
        }

    }

    return 0;
}