Cod sursa(job #3262552)

Utilizator Daniel_TTudor Daniel Andrei Daniel_T Data 10 decembrie 2024 18:57:15
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMAX = 100000;
int t[NMAX + 5], h[NMAX + 5];

int findr(int u){
    while(t[u] != u)
        u = t[u];
    return u;
}

void unire(int u, int v){
    int ru, rv;

    ru = findr(u);
    rv = findr(v);

    if(h[ru] > h[rv])
        t[rv] = ru;
    else if(h[rv] > h[ru])
        t[ru] = rv;
    else{
        t[rv] = ru;
        h[ru]++;
    }
}



int main()
{
    int n, m, cod, x, y;

    fin >> n >> m;

    for(int i = 1; i <= m ; i++)
        t[i] = i;

    for(int i = 1; i <= m; i++){
        fin >> cod >> x >> y;

        if(cod == 1)
            unire(x, y);
        else if(findr(x) == findr(y))
            fout << "DA\n";
        else
            fout << "NU\n";

    }

    fin.close();
    fout.close();
    return 0;
}