Cod sursa(job #949397)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 13 mai 2013 17:44:55
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

using namespace std;

int tata[100002];
int h[100002];

int find(int x)
{
   int r=x;
   while(tata[r])
     r=tata[r];
   int y,t;
   y=x;
   
   while(y!=r)
   {
      t=tata[y];
      tata[y]=r;
      y=t;           
   }  
      
   return r;    
}

void uneste(int x,int y)
{
   x=find(x);
   y=find(y);
   
   if(h[x]<h[y])
     tata[x]=y;
   else
   {
     tata[y]=x;
     if(h[x]==h[y])
       h[x]++;    
   }
}

int main()
{
    ifstream fin("disjoint.in");
    ofstream fout("disjoint.out");
    int n,i,m,tip,x,y;
    fin>>n>>m;
    
    for(i=1;i<=n;i++)
      h[i]=1;
    
    for(i=0;i<m;i++)
    {
       fin>>tip>>x>>y;
       if(tip==1)
         uneste(x,y);
       else
       {
          if(find(x)==find(y))
             fout<<"DA\n";    
          else
             fout<<"NU\n";
       }
    }
    
    fin.close();
    fout.close();    
    //system("PAUSE");
    
    return 0;
}