Cod sursa(job #2217047)

Utilizator TheNextGenerationAyy LMAO TheNextGeneration Data 28 iunie 2018 18:51:10
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 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)
{
    int R = x;
    while (R!=link[R])
        R = link[R];
    while (x!=link[x])
    {
        int aux = link[x];
        link[x] = R;
        x = aux;
    }
    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";
        }
    }
}