Cod sursa(job #2203224)

Utilizator verde.cristian2005Verde Flaviu-Cristian verde.cristian2005 Data 11 mai 2018 15:59:01
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
using namespace std;
ifstream in("disjoint.in");
ofstream out("disjoint.out");
int t[100001],nre[100001];
int radacina(int val)
{
 if(t[val]==0)
        return val;
    t[val]=radacina(t[val]);
 return t[val];
}
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(rx==ry)
    return;
    if(nre[rx]>nre[ry])
    {
     nre[rx]+=ry;
     t[ry]=rx;
    }
    else
    {
     nre[ry]+=rx;
     t[rx]=ry;
    }
}
int main()
{
    int n,m,c,x,y,i;
    in>>n>>m;
    for(i=1;i<=m;i++)
    {
     in>>c>>x>>y;
     if(c==2)
     {
         if(verif(x,y))
        out<<"DA\n";
            else
        out<<"NU\n";
     }
     else
     reuniune(x,y);
    }
    return 0;
}