Cod sursa(job #2073178)

Utilizator zukatomoGall Janos zukatomo Data 22 noiembrie 2017 19:39:17
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>

using namespace std;

int tomb[100001]={0};
int hossz[100001];

int root(int a){
    int i=a;
    while(i!=tomb[i]){
        tomb[i]=tomb[tomb[i]];
        i=tomb[i];
    }
    return i;
}
void unite(int a, int b){
    int r1, r2;
    r1 = root(a);
    r2 = root(b);
    if(r1!=r2){
        if(hossz[r1]>hossz[r2]){ tomb[r2] = r1; hossz[r1]+=hossz[r2];}
        else{ tomb[r1] = r2; hossz[r2]+=hossz[r1];}
    }
}

bool querry(int a, int b){
    int r1, r2;
    r1 = root(a);
    r2 = root(b);
    if(r1==r2) return true;
    return false;
}



int main()
{
    ifstream be("disjoint.in");
    ofstream ki("disjoint.out");
    int n, m, muvelet, a,b;
    be >> n >> m;
    for(int i =0;i<n;i++){tomb[i]=i; hossz[i]=1;}
    for(int i=1;i<=m;i++){
        be >> muvelet >> a >> b;
        hossz[tomb[i]]++;
        if(muvelet==1) unite(a,b);
        else if(querry(a,b)) ki << "DA\n";
             else ki << "NU\n";
    }
    cout << "Hello world!" << endl;
    return 0;
}