Cod sursa(job #592613)

Utilizator mihai995mihai995 mihai995 Data 29 mai 2011 13:56:12
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
using namespace std;

const int N=100003;
const char s[][10]={"NU\n","DA\n"};
int T[N],size[N],n;

ifstream in("disjoint.in");
ofstream out("disjoint.out");

void reuneste(int x,int y)
{
    if (size[x]>size[y])
    {
        T[y]=x;
        size[x]+=size[y];
    }
    else
    {
        T[x]=y;
        size[y]+=size[x];
    }
}

int radacina(int x)
{
    if (T[x]==x)
        return x;
    T[x]=radacina(T[x]);
    return T[x];
}

int main()
{
    int m,a,x,y,i;
    in>>n>>m;
    for (i=1;i<=n;i++)
    {
        T[i]=i;
        size[i]=1;
    }
    while (m--)
    {
        in>>a>>x>>y;
        x=radacina(x);
        y=radacina(y);
        if (a==1)
            reuneste(x,y);
        else
            out<<s[x==y];
    }
    return 0;
}