Cod sursa(job #270668)

Utilizator igsifvevc avb igsi Data 4 martie 2009 13:00:24
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.85 kb
#include<fstream.h>

#define xx 100001

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

int t[xx],rang[xx],n,m;

int multime(int i)
{
    if(t[i]!=i)
      t[i]=multime(t[i]);
    return t[i];
}

void reuniune(int i,int j)
{
     i=multime(i);
     j=multime(j);
     
     if(i==j) return;
     
     if(rang[i]<rang[j])
       t[i]=j;
     else
       t[j]=i;
     
     if(rang[i]==rang[j])
       rang[i]++;
}

int main()
{
    int i,op,x,y;
    
    fin>>n>>m;
    
    for(i=1;i<=n;i++)
      t[i]=i;
    
    for(i=1;i<=m;i++)
    {
       fin>>op>>x>>y;
       if(op==1)
          reuniune(x,y);
       else
         if(multime(x)==multime(y))
            fout<<"DA\n";
         else
            fout<<"NU\n";
    }
    
    fout.close();
    return 0;
}