Cod sursa(job #2649978)

Utilizator felix24mihaiPrava Felix Mihai felix24mihai Data 16 septembrie 2020 22:58:48
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){
    int aa = find2(a);
    int bb = find2(b);
    if (rank_[aa] < rank_[bb])
        father[aa] = bb;
    else
        father[bb] = aa;
    if (rank_[aa] == rank_[bb])
        rank_[aa]++;
}
 
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;
}