Cod sursa(job #1248916)

Utilizator azkabancont-vechi azkaban Data 26 octombrie 2014 11:12:07
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
using namespace std;
ifstream cin("disjoin.in");
ofstream cout("disjoint.out");

int Root[100013], Rank[100013];
int n,i,j,m,a,b,op;

int Find_root(int nod)
{
 if (Root[nod]!=nod) nod=Root[nod];
 return nod;
}

void unite ( int a, int b)
{
 if (Rank[a]>Rank[b]) Root[b]=a;
                else  
 if (Rank[a]<Rank[b]) Root[a]=b;
                else {
                      Root[a]=b;
                      ++Rank[b];
                      }
 
}

int main()
{
 cin>>n>>m;
 for (i=1;i<=n;++i) Root[i]=i, Rank[i]=1;
 while(m--)
   {
    cin>>op>>a>>b;
    int r1=Find_root(a);
    int r2=Find_root(b);
    if (op==1) unite(r1,r2);
    if (op==2){
               if (r1==r2) cout<<"DA\n";
                      else cout<<"NU\n";
               }
   }  
return 0;
}