Cod sursa(job #2692562)

Utilizator Razvank206Dumitriu Razvan Razvank206 Data 3 ianuarie 2021 08:39:02
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("disjoint.in");
ofstream out("disjoint.out");
const int NMAX = 1e5+5;
int link[NMAX],size[NMAX];

int find(int x)
{
    while (x!=link[x])
        x = link[x];
    return x;
}
void unite(int x, int y)
{
    x = find(x);
    y = find(y);
    if (size[x]<size[y])
        swap(x,y);
    size[x]+=size[y];
    link[y] = x;
}

int main()
{
    int n,m;
    in >> n >> m;
    for (int i = 1; i<=n; i++)
    {
        link[i] = i;
        size[i] = 1;
    }
    for (int i = 1; i<=m; i++)
    {
        int type,x,y;
        in >> type >> x >> y;
        if (type == 1)
            unite(x,y);
        else
        {
            if (find(x) == find(y))
                out << "DA\n";
            else
                out << "NU\n";
        }
    }
}