Cod sursa(job #2298385)

Utilizator refugiatBoni Daniel Stefan refugiat Data 8 decembrie 2018 09:33:39
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
#define EMAX 100005
using namespace std;
ifstream si("disjoint.in");
ofstream so("disjoint.out");
int rad[EMAX];

int tata(int x) {
    while(rad[x]!=rad[rad[x]])
        rad[x]=rad[rad[x]];
    return rad[x];
}
bool query(int a,int b) {
    int t1,t2;
    t1=tata(a);
    t2=tata(b);
    return (t1==t2);
}
void uneste(int a,int b) {
    int t1=tata(a),t2=tata(b);
    if((a+b)&1)
        rad[t2]=rad[t1];
    else
        rad[t1]=rad[t2];
}
int main() {
    int n,m;
    si>>n>>m;
    int a,b,c;
    for(int i=1;i<=n;++i) {
        rad[i]=i;
    }
    for(int i=0;i<m;++i) {
        si>>a>>b>>c;
        if(a==1)
            uneste(b,c);
        else
        {
            if(query(b,c))
                so<<"DA"<<'\n';
            else
                so<<"NU"<<'\n';
        }
    }
    return 0;
}