Cod sursa(job #1137424)

Utilizator span7aRazvan span7a Data 9 martie 2014 12:53:32
Problema Paduri de multimi disjuncte Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.93 kb
#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");
int i,n,m,tata[100001],adanc[100001],radx,rady,cer,x,y;
void completeaza()
{
    for(i=1;i<=n;i++)
        tata[i]=i;
}
int rad(int i)
{
    while(tata[i]!=i)
        i=tata[i];
    return i;
}
void solve(int x,int y)
{
        radx=rad(x);
        rady=rad(y);
        if(radx!=rady)
        {
            if(adanc[x]==adanc[y])
            {
                tata[x]=y;
                adanc[y]++;
            }
            else
                if(adanc[x]<adanc[y])
                    tata[x]=y;
                else tata[y]=x;
        }
}
int main()
{

    f>>n>>m;
    completeaza();
    for(i=1;i<=m;i++)
    {
        f>>cer>>x>>y;
        if(cer==1)
            solve(x,y);
        else
            if(rad(x)==rad(y))
                g<<"DA\n";
            else g<<"NU\n";
    }

    return 0;
}