Cod sursa(job #1815801)

Utilizator raresm44vasile rares raresm44 Data 25 noiembrie 2016 19:44:48
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
using namespace std;
int h[100001],t[100001],n,k,q,x,y;
int radacina(int x)
{
    if(t[x]==0)
        return(x);
    t[x]=radacina(t[x]);
    return(t[x]);
}
bool verif(int x,int y)
{
    return(radacina(x)==radacina(y));

}
void reuniune(int x,int y)
{
    int rx=radacina(x), ry=radacina(y);
    if(h[rx]>h[ry])
        t[ry]=rx;
    else if(h[rx]<h[ry])
        t[rx]=ry;
    else
    {
        t[rx]=ry;
        h[ry]++;
    }
}
int main()
{
    ifstream f("disjoint.in");
    ofstream g("disjoint.out");
    f>>n>>k;
    for(int i=1; i<=n; i++)
    {
        h[i]=1;
        t[i]=0;
    }
    for(int i=1; i<=k; i++)
    {
        f>>q>>x>>y;
        if(q==1)
            reuniune(x,y);
        else if(verif(x,y))
            g<<"DA\n";
        else
            g<<"NU\n";
    }
    cout << "Hello world!" << endl;
    return 0;
}