Cod sursa(job #772286)

Utilizator ionut_blesneagIonut Blesneag ionut_blesneag Data 28 iulie 2012 23:00:36
Problema Paduri de multimi disjuncte Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
/* paduri de multimi disjuncte */

#include<fstream>
using namespace std;
ifstream f("disjoint.in");
ofstream g("disjoint.out");

int n,i,j,nrq;
int m[100001];
int size[100001];

int find(int x)
{int r;
 r=x;
 while(m[r]!=r)
  r=m[r];
 
 /*int y;
 y=x;
 while(m[y]!=y)
  {m[y]=r;
   y=m[y];}  */
 return r;
}
  
void unite(int x, int y)
{if(size[x]>size[y])
   m[y]=x;
 else
   m[x]=y;
 if(size[x]==size[y])   size[y]++;}  
    

int main()
{int a,b,c;
f>>n>>nrq;
for(i=1; i<=n; i++)
  {m[i]=i;  size[i]=1;} 
for(i=1; i<=nrq; i++)
 {f>>c>>a>>b;
  if(c==1)
    unite(find(a),find(b));
  if(c==2)
    if(find(a)==find(b))
       g<<"DA"<<endl;
    else
       g<<"NU"<<endl;   
 }  
  
f.close();
g.close();    
return 0;}