Cod sursa(job #755985)

Utilizator ion824Ion Ureche ion824 Data 8 iunie 2012 14:58:27
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include<fstream>
#define nmax 100005
using namespace std;
int a[nmax],r[nmax],n,m;

int find(int x)
{
 int i,y;
 for(i=x; a[i]!=i; i=a[i]);
 for(; a[x]!=x;)
 {
  y=a[x];
  a[x]=i;
  x=y;      
 }
  return i;    
}

void join(int x,int y)
{
 if(r[x]>r[y])a[y]=x;
         else a[x]=y; 
 if(r[x]==r[y])++r[y];
}

int main(void)
{
   ifstream fin("disjoint.in");
   ofstream fout("disjoint.out");
   int i,x,y,cod;
   fin>>n>>m;
   for(i=1;i<=n;++i)
   {
    a[i]=i;
    r[i]=1;                 
   }
    for(i=1;i<=m;++i)
    {
     fin>>cod>>x>>y;
     if(cod==2){
                if(find(x)==find(y))fout<<"DA\n"; else fout<<"NU\n";
                }                 
         else
           join(find(x),find(y));
    }
    
 return 0;   
}