Cod sursa(job #2479183)

Utilizator MariusblockMoga Marius-Ioan Mariusblock Data 23 octombrie 2019 15:01:31
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,m;
int v[100005];
int w[100005];

int rettata(int i){
    while(v[i] != i){
        i = v[i];
    }
    return i;
}

void unite(int x,int y){
    if(w[x] > w[y]){
        v[y] = v[x];
    }else{
        v[x] = v[y];
    }
    if(w[x] == w[y]){
        w[y]++;
    }
}

int main()
{
    int i;
    int tata;
    int a1,a2,c1;
    fin>>n>>m;
    for(i = 1; i <= n; i++){
        v[i] = i;
        w[i] = 1;
    }
    for(i = 1; i <= m; i++){
        fin>>c1>>a1>>a2;
        if(c1 == 1){
            tata = rettata(a1);
            unite(tata,rettata(a2));
        }else if(c1 == 2){
            if(rettata(a1) == rettata(a2)){
                fout<<"DA"<<endl;
            }else{
                fout<<"NU"<<endl;
            }
        }
    }
    return 0;
}