Cod sursa(job #3167333)

Utilizator Razvan23Razvan Mosanu Razvan23 Data 10 noiembrie 2023 17:11:44
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
using namespace std;

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

int n, m, p;
int T[100005], S[100005];

int Find(int x)
{
    int i, y;
    for(i = x; T[i] != i ; i = T[i]) ;
    for(; T[x] != x;)
    {
        y = T[x];
        T[x] = i;
        x = y;
    }
    return i;
}

void Unite(int x, int y)
{
    if(S[x] > S[y]) T[y] = x;
    else T[x] = y;
    if(S[x] == S[y]) S[y]++;
}


int main()
{
    int i, x, y;
    cin >> n >> m;
    for(i=1;i<=n;i++)
    {
        T[i] = i;
        S[i] = 1;
    }
    for(i=1;i<=m;i++)
    {
        cin >> p >> x >> y;
        if(p == 1 && Find(x) != Find(y)) Unite(Find(x), Find(y));
        else if(p == 2)
        {
           if(Find(x) == Find(y)) cout << "DA\n";
           else cout << "NU\n";
        }
    }
    fin.close();
    fout.close();
    return 0;
}