Cod sursa(job #2648298)

Utilizator felix24mihaiPrava Felix Mihai felix24mihai Data 9 septembrie 2020 21:18:23
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-32 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <vector>
#define NMax 100001
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");

int n, father[NMax],rank_[NMax];
int find2(int a){
    if (father[a] == a)
        return a;
    return find2(father[a]);
}

void unionOf(int a, int b){
    if (rank_[find2(a)] < rank_[find2(b)])
        father[find2(a)] = find2(b);
    else
        father[find2(b)] = find2(a);
    if (rank_[find2(a)] == rank_[find2(b)])
        rank_[find2(a)]++;
}

void findOf(int a, int b){
    if (find2(a) == find2(b))
        g <<"DA\n";
    else
        g << "NU\n";
}
void read(){
    int m;
    f >> n >> m;
    for (int i=1; i<=n; i++){
            father[i] = i;
            rank_[i] = 1;
        }
    int a,b,c;
    for (int i=1; i<=m; i++){
        f >> a >> b >> c;
        if (a == 1)
            unionOf(b,c);
        else
            findOf(b,c);
    }
}

int main()
{
    read();
    return 0;
}