Cod sursa(job #2512553)

Utilizator AntoniuFicAntoniu Ficard AntoniuFic Data 21 decembrie 2019 11:38:51
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <set>

using namespace std;

int n, m;
int mult[100005];
int multimi[100005];

struct lista{
    int el;
    lista *next = nullptr, *last = this;
}liste[100005];

void reunite(int x, int y){
    int mult1 = mult[x], mult2 = mult[y];
    lista *p = &liste[mult2];
    while(p != nullptr){
        mult[p->el] = mult1;
        p = p->next;
    }
    liste[mult1].last->next = &liste[mult2];
    liste[mult1].last = liste[mult2].last;
}

int main() {
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f>>n>>m;
    for (int i = 1; i <= n; ++i) {
        mult[i] = i;
        liste[i].el = i;
    }
    for (int i = 0; i < m; ++i) {
        int tip, x, y;
        f>>tip>>x>>y;
        if(tip == 2){
            if(mult[x] == mult[y])
                g<<"DA\n";
            else g<<"NU\n";
        }else{
            reunite(x, y);
        }
    }
    return 0;
}