Cod sursa(job #2392379)

Utilizator Bulboaca_EugenBulboaca Alexandru Eugen Bulboaca_Eugen Data 29 martie 2019 22:16:38
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1e5 + 5;
std::vector <int> g[MAXN];
int father[MAXN];
int sizee[MAXN];
void findd(int x){
    if(father[x] == x) return;
    findd(father[x]);
    father[x] = father[father[x]];
    ///sizee[father[x]] ++;
}
void unionn(int x, int y){
    int a = father[x], b = father[y];
    if(sizee[a] > sizee[b]) swap(a, b);
    sizee[b] += sizee[a];
    father[a] = b;
}
ifstream fin("dfs.in");
ofstream fout("dfs.out");
int main(){
    int n, m;
    fin >> n >> m;
    for(int i = 1; i <= n; ++i) father[i] = i;
    for(int i = 1; i <= m; ++i){
        int type, a, b;
        fin >> type >> a >> b;
        if(type == 1){
            unionn(a, b);
            findd(a);
            findd(b);
        }
        else{
            if(father[a] == father[b]) fout << "DA";
            else fout << "NU";
            fout << '\n';
        }
    }
    return 0;
}