Cod sursa(job #1549595)

Utilizator mambojamboPop Flaviu mambojambo Data 12 decembrie 2015 15:13:29
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fi("disjoint.in");
ofstream fo("disjoint.out");
int cod,n,m;
int dad[100005],sons[100001],i,x,y,a,b;

int root(int x)
{
    if(dad[x]==x)
    return x;
    else return(root(dad[x]));
}

void join(int x,int y)
{   int r1=root(x);
    int r2=root(y);

    if(r1==r2) return;
    if(sons[r1]>=sons[r2])
        {
            sons[r1]+=sons[r2];
            dad[r2]=r1;
        }
        else
        {
            sons[r2]+=sons[r1];
            dad[r1]=r2;
        }
}
void work()
{
    fi>>n>>m;
    for(i=1;i<=n;i++)
    {
        dad[i]=i;
        sons[i]=1;
    }
    for(i=1;i<=m;i++)
    {
        fi>>cod>>x>>y;
        if(cod==1)
        {
            join(x,y);
        }
        if(cod==2)
        {
            if(root(x)==root(y))
                fo<<"DA"<<"\n";
                else
                    fo<<"NU"<<"\n";
        }
    }

}

int main()
{
  work();

    return 0;
}