Cod sursa(job #527162)

Utilizator APOCALYPTODragos APOCALYPTO Data 30 ianuarie 2011 18:51:11
Problema Paduri de multimi disjuncte Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
//alta data

using namespace std;
#include<iostream>
#include<fstream>

ofstream fout("disjoint.out");
#define nmax 100005

int N,M,r[nmax],T[nmax];
int find(int x)
{
    int R,y;
    for(R=x;R!=T[R];R=T[R]);

    for(;x!=T[x];)
    {
        y=T[x];
        T[x]=R;
        x=y;
    }
    return R;
}

void unite(int x,int y)
{
    if(r[x]>r[y])
       T[y]=x;
      else
       T[x]=y;
    if(r[x]==r[y]) r[y]++;

}


void init()
{
    int i;
    for(i=1;i<=N;i++)
    {
        T[i]=i;
        r[i]=1;
    }

}
void cit()
{
  ifstream fin("disjoint.in");

  fin>>N>>M;
  init();
  int i,x,y,z;
   for(i=1;i<=M;i++)
   {
       fin>>x>>y>>z;
       if(x==1)
       {
           unite(find(y),find(z));
       }
       else
       {
           if(find(y)==find(z))
           {
               fout<<"DA\n";
           }
           else
           {
               fout<<"NU\n";
           }
       }
   }
  fin.close();
}

int main()
{
    cit();

    fout.close();
    return 0;
}