Cod sursa(job #1722859)

Utilizator refugiatBoni Daniel Stefan refugiat Data 29 iunie 2016 09:52:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include<fstream>
#include<iostream>
#define elemax 100002
using namespace std;
ifstream si("disjoint.in");
ofstream so("disjoint.out");
int rad[elemax];

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);
}

// Uneste multimea lui a cu multimea lui b
inline 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,i;
    for(i=1;i<=n;++i)
    {
        rad[i]=i;
    }
    for(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';
        }
    }
    si.close();
    so.close();
    return 0;
}